2017-03-15 28 views
-1

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

from helper_functions.email_from_server import send_email 

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

从内IPython的这个脚本的进口没有任何问题。

相比较而言,我有没有IPython的范围内,我可以使用下面的命令运行另一个脚本的任何问题上运行的代码: 运行script.py

在命令行中,我可以运行同一个脚本: 蟒蛇/ DIR/script.py

但是,这个python /dir/script.py不能与本地导入脚本一起工作(从上面),我无法弄清楚它是pythonpath问题还是一些本地环境问题?我一直在阅读堆栈以找到它,但迄今尚未能够实现。这感觉就像它指日可待

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

EDIT(帮助澄清): 我使用在Linux蟒蛇分布机。

+0

ipython可能使用了一些其他的python可执行文件。所以,也许你安装了anaconda并且使用了ipython,但是cmd调用了一些vanilla-python dist。但再次阅读您的问题,并检查您是否提供了足够的信息。你甚至没有告诉我们你使用的是什么操作系统。 – sascha

+0

你能告诉我们脚本和错误信息吗?在不知道你在看什么的情况下,任何人都很难帮助 –

+0

@sascha - 谢谢你的评论 - 编辑澄清 – SteelyDanish

回答

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 
1

Mu 012 PYTHONPATH是悲伤的秘诀。你可以做到这一点,但你不应该。正确的做法是将您的软件包安装在正确的环境中。如果您不知道如何创建包here's a super simple example。通过ipython vs命令行运行时,您的路径可能会有所不同。

你可以找出差异是通过使用sys.executablesys.path

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

运行,从IPython中,然后运行从python在命令行上。毫无疑问,你会得到两个不同的结果。由于您运行的是Anaconda,因此您需要follow their guide来安装非Conda软件包以安装您构建的软件包。

虽然当然假设你已经在你的路径上安装了anaconda python,但你可以在Linux上检查which python

+0

谢谢韦恩 - sys.executable对于ipython和python都是一样的。我没有把它作为一个软件包建立起来 - 所以也许这就是问题的一部分。如果可能的话,我希望能够执行脚本而不必构建包。 – SteelyDanish

+0

如果你打算制作一个软件包,你应该制作一个软件包,否则你应该只需要一个大文件,分成小的函数和类,然后运行它。这假定你不会重用任何代码。但是,如果您正在编写重用代码,则您正在尝试创建一个包。我已经添加了关于路径的答案 - 如果'sys.path'是相同的,那么有些东西很奇怪。 –

+0

谢谢@Wayne Werner我检查了sys.path,它们和我的python sys路径有很多相同的路径(anaconda/bin的位置)。如果我把这一行放在 - >/home/anaconda2/bin/python /project_folder/script.py中,那么将适当地导入sys路径 - 这就是我所假设的。我试图重写这个问题。 (http://stackoverflow.com/questions/42823059/crontab-issues-with-python-script) – SteelyDanish

相关问题