【发布时间】:2018-07-09 23:18:11
【问题描述】:
当我尝试从 Linux 终端运行代码时,我的导入不起作用。具体来说,从同一项目中的其他包导入。我知道这是一个 PYTHONPATH 问题,但我不知道如何进一步诊断或解决它。 代码在 IDE (eclipse) 中运行良好。
我对永久解决方案感兴趣,猜测它会涉及编辑 .bashrc。我只是想从命令行调用脚本,比如
python my_script.py
os.environ["PYTHONPATH"] 在 ipython 终端中出现关键错误。
我试过了
print os.getcwd()
print sys.path
IDE 内部
/home/myname/workspace/project2/main
['/home/myname/workspace/project2/main', '/home/myname/workspacep/problem2', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_6
4-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/p
ython2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pytho
n2.7/dist-packages/ubuntu-sso-client', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/lib-old']
内部终端
/home/myname/workspace/project2/main
['/home/myname/workspace/project2/main', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
【问题讨论】:
-
这很可能是由于您在不同的路径上执行了脚本。尝试有一个打印
os.getcwd()和sys.path的脚本,然后在您的IDE 和您正在执行脚本的同一位置上单独运行它。你会看到不同。您可以尝试sys.path.append()IDE 的os.getcwd()的绝对路径。 -
我根据您的指示添加了详细信息。什么是永久解决方案,你能告诉我一步一步吗?我不知道 sys.path.append() 到底是什么意思,我怀疑这是一个永久的解决方案。我希望能够使用 python my_script.py 从命令行调用 python 脚本
-
IMO 的永久解决方案是将您的模块转换为一个包并使用您的 pip 安装它,这将确保您的代码在安装包后可以在任何计算机上的任何路径上运行。但这是必要的更多工作。下一个最佳解决方案是 @JohnH 添加到 PATH 环境的答案,您可以阅读更多 here。
append()是一个临时解决方案,但取决于您的项目大小,这可能就是您所需要的。
标签: python python-import pythonpath