我有一个在ipython中运行的脚本但是当我尝试从命令行运行相同的脚本时,我收到了我尝试导入的本地模块的导入错误:
from helper_functions.email_from_server import send_email
错误: ImportError:没有名为helper_functions.email_from_server的模块
此脚本从Ipython中导入,没有任何问题。
相比之下,我的代码在ipython中运行没有任何问题我可以使用以下命令运行另一个脚本: 运行script.py
从命令行我可以运行相同的脚本: python /dir/script.py
然而,这个python /dir/script.py不适用于带有本地导入的脚本(从上面),我无法弄清楚它是pythonpath问题还是一些本地环境问题?我一直在阅读堆栈以找到它,但到目前为止还没有。感觉就像它就在附近
一个尝试的解决方案: PYTHONPATH = / dir / python /dir/script.py
编辑(帮助澄清): 我在linux机器上使用anaconda发行版。
答案 0 :(得分:1)
与0
混在一起是悲伤的秘诀。你可以这样做,但你不应该这样做。正确的做法是在正确的环境中安装包。如果您不知道如何创建包here's a super simple example。通过ipython与命令行运行时,您的路径可能会有一些差异。
您可以使用PYTHONPATH
和sys.executable
sys.path
从IPython运行它,然后从命令行上的import sys
print(sys.executable)
print(sys.path)
运行它。毫无疑问,你会得到两个不同的结果。由于您正在运行Anaconda,因此您希望follow their guide安装非conda软件包以安装您构建的软件包。
虽然当然假设你已经在你的路径上获得了anaconda python - 你可以用python
来检查它,因为你已经在Linux上了。
答案 1 :(得分:0)
我通过创建包装器shell脚本解决了这个问题。很难看出我每次都在导出python路径,但它确实有效。
#!/bin/bash
export PYTHONPATH="${PYTHONPATH}:/my/dir"
source ~/.bash_profile
cd /my/dir && my/anaconda/location/bin/python /my/dir/to/script/cript.py