我有一个Python脚本main.py
,该脚本可以从同一目录中的其他脚本导入各种模块。
随行
import sys
print(sys.path)
我可以看到,当我运行main.py
时,它所在的目录(下面的binBuild
)会与我正在使用的python版本一起添加到PYTHONPATH
中({{1 }}(来自miniconda)
python3.5
['/ms/data5/USERNAME/Programmes/MYCODE/binBuild', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python35.zip', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/plat-linux', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/lib-dynload', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/site-packages', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg']
包含两个选项-它可以直接运行,或者通过指定标志可以调用gui。在此阶段,main.py可以正常运行。gui包含可以设置的各种选项,然后在开始处理时调用main.py
以启动代码的主要运行。此时,代码将失败,并出现以下错误:
main.py
如果在此阶段打印Traceback (most recent call last):
File "/ms/data5/USERNAME/Programmes/MYCODE/binBuild/GUI/../main.py", line 12, in <module>
from GlobalParams import GlobalParams
ModuleNotFoundError: No module named 'GlobalParams'
,则可以看到PYTHONPATH
现在包含指向包含PYTHONPATH
的目录的路径的两个副本。
main.py
我还注意到,在此阶段,它会拾取另一个安装在系统其他位置的python(3.7)副本。
但是,python不再能够从['/ms/data5/USERNAME/Programmes/MYCODE/binBuild', '/ms/data5/USERNAME/Programmes/MYCODE/binBuild', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python35.zip', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/plat-linux', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/lib-dynload', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/site-packages', '/ms/data5/USERNAME/Programmes/MYCODE/miniconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg', '/ms/data5/USERNAME/anaconda3/lib/python37.zip', '/ms/data5/USERNAME/anaconda3/lib/python3.7', '/ms/data5/USERNAME/anaconda3/lib/python3.7/lib-dynload', '/ms/data5/USERNAME/anaconda3/lib/python3.7/site-packages']
目录(存在binBuild
的目录)中导入任何模块。为什么python不再能够找到模块,即使它们位于其路径上的目录中。这是预期的行为吗?
答案 0 :(得分:0)
经过更多调试后,我发现了问题所在,所以我只是在这里发布对我有帮助的内容,以防其他情况有用。提示是/ms/data5/USERNAME/anaconda3/lib/python3.7/
中出现了额外的python发行版(PYTHONPATH
)。由于代码中的错误,GUI并未调用打包的python(python3.5
),而是调用了系统python。
我通过在main.py
中放置以下几行来检测到这一点
import sys
print(sys.version_info)
这表明python版本在运行main.py
以打开GUI和GUI回调到main.py
之间有所变化。在这种情况下,以下堆栈溢出答案很有用: