脚本在 ipython 中运行,但不能从命令行运行

Script working in ipython but not from the command line

我有一个在 ipython 中运行的脚本,但是当我尝试 运行 来自命令行的相同脚本时,我收到了我尝试导入的本地模块的导入错误:

from helper_functions.email_from_server import send_email 

错误: 导入错误:没有名为 helper_functions.email_from_server

的模块

此脚本从 Ipython 中导入,没有任何问题。

相比之下,我的代码 运行 在 ipython 中没有任何问题我可以 运行 使用命令的另一个脚本: 运行script.py

从命令行我可以运行相同的脚本: python /dir/script.py

但是这个 python /dir/script.py 不适用于本地导入的脚本(从上面),我无法确定它是否是 python 路径问题还是一些本地环境问题?我一直在阅读堆栈以找到它,但到目前为止还没有找到。感觉指日可待

一个尝试的解决方案: PYTHONPATH=/dir/ python /dir/script.py

编辑(帮助澄清): 我在 linux 机器上使用 anaconda 发行版。

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

您可以使用 sys.executablesys.path 找出不同之处:

import sys
print(sys.executable)
print(sys.path)

运行 来自 IPython,然后 运行 来自命令行上的 python。你无疑会得到两个不同的结果。由于您使用的是 运行ning Anaconda,因此您希望 follow their guide 安装非 conda 软件包以安装您构建的软件包。

虽然当然假设您已经在您的路径上找到了蟒蛇 python - 您可以使用 which python 进行检查,因为您在 Linux.

我通过创建包装器 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