ipython和python是不是同一个软件_关于python:脚本可在ipython中运行,但不能从命令行运行...

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

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

您能告诉我们您收到的脚本和错误消息吗? 不知道你看到了什么,任何人都会很难帮助

@sascha-感谢您的评论-编辑以澄清

@SteelyDanish请仔细阅读最简单的示例,这不是示例。

@WayneWerner谢谢-试图根据那些标准进行重构

用PYTHONPATH乱搞是悲伤的秘诀。 您可以做到,但不可以。 正确的做法是将软件包安装在正确的环境中。 如果您不知道如何创建包,那么这里有一个非常简单的示例。 通过ipython vs命令行运行时,路径可能会有一些差异。

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

import sys

print(sys.executable)

print(sys.path)

从IPython运行该程序,然后从命令行上的python运行该程序。 无疑,您将获得两个不同的结果。 由于您正在运行Anaconda,因此您要遵循其安装非conda软件包的指南来安装自己构建的软件包。

当然,这当然是假设您的路径上有PythonPython-您可以使用which python进行检查,因为您使用的是Linux。

感谢Wayne-ipython和python的sys.executable都相同。我没有将其构建为软件包-所以也许这就是问题的一部分。我希望执行脚本而不必构建软件包(如果可能)。

如果要打包,则应该打包,否则,应该只有一个大文件,分成小函数和小类,然后运行它。假设您不会重复使用任何代码。但是,如果您编写代码以供重用,则尝试创建一个程序包。我已经添加了关于路径的答案-如果sys.path相同,则有些奇怪。

感谢@Wayne Werner,我检查了sys.path,它们与我的python sys路径几乎相同,但具有额外的路径(anaconda / bin的位置)。如果我将这一行放在-> / home / anaconda2 / bin / python /project_folder/script.py中,那将适当地导入sys路径-这就是我的假设。我试图重写问题。 (stackoverflow.com/questions/42823059/)

这对于确定我在ipython和python中的sys.path中是否存在差异非常有帮助

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值