zoukankan      html  css  js  c++  java
  • 命令行运行python模块时提示包找不到的问题

    庄稼人不是专职python开发的道友。尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具。

    多年来。一直困惑于这样一个问题:相同的project。相同的代码,使用pydev能够执行随意一个python脚本,而使用命令行执行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev到底做了什么魔术呢?



    长话短说,以上面project为例,假设是在命令行中直接执行 python c.py , 都会提示"ImportError: No module named xx_package.b".可是pydev中能够直接执行。

    比較两者的包查找路径,也就是sys.path。

    pythondev:

    ['F:\Archive\workspace-java\PyExperiment\xx_package', 'F:\Archive\workspace-java\PyExperiment', 'F:\Archive\workspace-java\PyExperiment\xx_folder' 。。

    。。]

    命令行:

    ['F:\Archive\workspace-java\PyExperiment\xx_package', 。。。]


    什么都不用说了,明眼人一看就明确了。pydev在执行时会把当前project的全部文件夹路径都作为包的搜索路径,而命令行默认仅仅是搜索当前路径。也于是乎。xx_package也就不可能会被找到。由于它是在上一级文件夹中。


    明确了这一点,剩下的就非常easy了,要在命令行中运行c.py, 或者改动sys.path, 将上一级文件夹也包括进去。只是个人不喜欢。

    比較简单的方式还是统一脚本的运行路径是project的根文件夹,即每次都在project根文件夹下新建一个脚本,比方叫main.py。

    它什么也不做,仅仅是将c.py导入进来。仅此而已。

    main.py

    import xx_package.c

    试试,这样就能够正常在命令行中执行了,当然双击脚本也是也一样的



    另外。补充两点。

    1. 与shell等脚本不同。 python的搜索路径。是第一个运行的脚本所在的路径。而不是当前命令行窗体中提示的路径

     PyExperiment xx_package >python c.py

      PyExperiment > pthon xx_package/c.py

      对python来说,搜索路径都是c.py所在的路径PyExperiment xx_package

    2. 假设某个目录是纯粹的目录。不是python意义上的包。如上面实例project中的xx_folder, 

    那么能够直接在命令行中执行c.py. 由于导入b.py时不须要指出查找xx_folder, 详细能够參看久远前的一篇文章

    python最简单直接的自己定义模块导入方法



  • 相关阅读:
    Windows Phone自学笔记(2)
    对MVC的初步认识
    CMSIS 的相关知识
    关于机器码的一些疑惑
    关于预编译处理的尝试
    IAR提示错误C:\Program Files\IAR Systems\Embedded Workbench 6.4 Kickstart\arm\bin路径下的armjlink.dll文件
    Spring学习笔记(四)
    Spring学习笔记(三)
    Docker容器数据卷(v创建数据卷)
    Spring5学习笔记(一)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7040314.html
Copyright © 2011-2022 走看看