脚本在ipython中工作但不是从命令行

时间:2017-03-15 00:39:35

标签: python import environment-variables ipython pythonpath

我有一个在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发行版。

2 个答案:

答案 0 :(得分:1)

0混在一起是悲伤的秘诀。你可以这样做,但你不应该这样做。正确的做法是在正确的环境中安装包。如果您不知道如何创建包here's a super simple example。通过ipython与命令行运行时,您的路径可能会有一些差异。

您可以使用PYTHONPATHsys.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