庄稼人不是专职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 >
对python来说,搜索路径都是c.py所在的路径PyExperiment \ xx_package
2. 假设某个目录是纯粹的目录。不是python意义上的包。如上面实例project中的xx_folder,
那么能够直接在命令行中执行c.py. 由于导入b.py时不须要指出查找xx_folder, 详细能够參看久远前的一篇文章