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

在ipython中工作但不从命令行执行的脚本,python,import,environment-variables,ipython,pythonpath,Python,Import,Environment Variables,Ipython,Pythonpath,我有一个在ipython中运行的脚本,但当我尝试从命令行运行同一个脚本时,我会收到我尝试导入的本地模块的导入错误: from helper_functions.email_from_server import send_email 错误: ImportError:没有名为helper\u functions.email\u的模块从\u服务器发送 此脚本从Ipython内部导入,没有任何问题 相比之下,我的代码在ipython中运行时没有任何问题。我可以使用以下命令运行另一个脚本: 运行scr

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

from helper_functions.email_from_server import send_email 
错误: ImportError:没有名为helper\u functions.email\u的模块从\u服务器发送

此脚本从Ipython内部导入,没有任何问题

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

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

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

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

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

蟒蛇混在一起是一种悲伤的方法。你可以做,但你不应该。正确的做法是在正确的环境中安装软件包。如果您不知道如何创建包。通过ipython和命令行运行时,路径可能会有所不同

您可以通过使用
sys.executable
sys.path
来找出区别:

import sys
print(sys.executable)
print(sys.path)
从IPython运行它,然后从命令行上的
python
运行它。毫无疑问,你会得到两种不同的结果。由于您运行的是Anaconda,因此您希望为安装非conda软件包而安装您构建的软件包


当然,这是假设您的路径上已经有了anaconda python—您可以使用
检查哪个python
,因为您在Linux上。

我通过创建包装器外壳脚本解决了这个问题。丑陋的是,我每次都导出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

ipython可能正在使用其他一些python可执行文件。所以也许你安装了anaconda并使用了ipython,但是cmd调用了一些普通的python区。但是请再次阅读你的问题,并检查你是否提供了足够的信息。你甚至没有告诉我们你正在使用什么操作系统。你能给我们看一下你得到的脚本和错误消息吗?如果不知道你在看什么,任何人都很难理解help@sascha--感谢您的评论-编辑至clarify@SteelyDanish请仔细阅读a的构成要素-这不是一个。@WayneWerner谢谢-尝试根据这些标准进行重构Hanks Wayne-sys.executable对于ipython和python都是相同的。我没有把它作为一个包来构建,所以这可能是问题的一部分。如果可能的话,我希望在不构建包的情况下执行脚本。如果要创建包,应该创建包,否则应该创建一个大文件,分成小函数和小类,然后运行它。这假设您不会重用任何代码。但是,如果您编写代码是为了重用,那么您就是在尝试创建一个包。我已经在我的答案中添加了关于路径的内容-如果
sys.path
是相同的,那么就有点奇怪了。感谢@Wayne Werner,我检查了sys.path,它们与我的python sys路径非常相同,有一个额外的路径(anaconda/bin的位置)。如果我把这一行放在-->/home/anaconda2/bin/python/project_folder/script.py中,它会正确地导入sys路径——这就是我所假设的。我试图重新写这个问题。()这非常有助于确定我在ipython和python中的sys.path是否存在差异