我试图运行启动,除其他事项外,一个Python脚本的脚本。 我得到一个导入错误:没有名为模块...,但是,如果我启动IPython中并导入在通过翻译以同样的方式在同一模块,该模块被接受。
这是怎么回事,我该如何解决? 我试图了解蟒蛇如何使用PYTHONPATH但我彻底糊涂了。 任何帮助将不胜感激。
我试图运行启动,除其他事项外,一个Python脚本的脚本。 我得到一个导入错误:没有名为模块...,但是,如果我启动IPython中并导入在通过翻译以同样的方式在同一模块,该模块被接受。
这是怎么回事,我该如何解决? 我试图了解蟒蛇如何使用PYTHONPATH但我彻底糊涂了。 任何帮助将不胜感激。
这个问题的出现是由于在命令行解释器的IPython使用您当前的路径与一个单独的进程的方式做的方式 (无论是一个IPython的笔记本电脑,外部进程等)。 IPython的将寻找模块导入不仅在sys.path中发现,同时也对当前的工作目录。 当开始在命令行解释器,你在运行当前目录是您在启动IPython中的相同。如果你运行
import os
os.getcwd()
你会看到这是真的。
但是,假设你使用的是笔记本的IPython,运行os.getcwd()
和当前的工作目录,而不是在你告诉笔记本从您ipython_notebook_config.py文件进行操作(通常使用的文件夹c.NotebookManager.notebook_dir
设置)。
解决的办法是提供与路径到您的模块的Python解释器。 最简单的办法是到该路径追加到sys.path的列表。 在你的笔记本,第一次尝试:
import sys
sys.path.append('my/path/to/module/folder')
import module-of-interest
如果不工作,你有你的手无关的路径来导入不同的问题,你应该提供问题的详细信息。
更好(更永久的)的方式来解决,这是设置你的PYTHONPATH,它提供了解释与其他目录中查找Python软件包/模块。 编辑或设置PYTHONPATH作为一个全局变量取决于操作系统,并进行了详细这里讨论的Unix或视窗 。
只要创建一个名为空Python文件__init__.py
这显示错误的文件夹下,当你运行Python项目。
确保他们使用的是相同的解释两者。 这发生在我在Ubuntu上:
$ ipython3
> sys.version
'3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]'
$ python3
> sys.version
'3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]'
和sys.path
是两个翻译之间的不同。 为了解决这个问题,我删除的Python 3.3。
这样做sys.path.append('my-path-to-module-folder')
的工作,但要避免要使用该模块每次都做到这一点在IPython中,你可以添加export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
你~/.bash_profile
文件。
主要的原因是Python和IPython中的sys.paths是不同的。
请参考lucypark链接 ,该解决方案适用于我的情况。 它恰巧安装OpenCV时
conda install opencv
并得到了在IPython中导入错误,有三个步骤来解决这个问题:
import cv2
ImportError: ...
在Python和IPython都用下面的命令1.检查路径
import sys
sys.path
你会发现它们是不同的结果。 第二步,只是用sys.path.append
以修复试错错过的路径。
2.临时解决方法
在IPython中:
import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2
在ImportError:..
问题解决
3.永久性的解决方案
创建一个IPython的个人资料,并设置初始追加:
在bash shell中:
ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py
在六,附加到文件:
c.InteractiveShellApp.exec_lines = [
'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]
DONE
安装IPython中之前,我安装过的easy_install模块; 说sudo easy_install mechanize
。
安装IPython中后,我有IPython的识别模块,重新运行easy_install的。
如果您从命令行中运行它,有时候Python解释器是不知道的路径在哪里查找模块。
下面是我的项目的目录结构:
/project/apps/..
/project/tests/..
我运行下面的命令:
>> cd project
>> python tests/my_test.py
上面的命令运行后我得到了以下错误
no module named lib
LIB在my_test.py进口
我打印的sys.path,并计算出项目我工作的这条路是不是在sys.path中列出可用
我添加下面的代码在我的剧本开始my_test.py
。
import sys
import os
module_path = os.path.abspath(os.getcwd())
if module_path not in sys.path:
sys.path.append(module_path)
我不知道这是否是解决它的一个很好的方式,但是它确实为我工作。
也有类似的问题,通过调用固定它python3
而不是python
,我的模块是在Python3.5。
这是我如何固定它:
import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
sys.path.append(module_path)
我发现这种差异的另一个来源:
我已经IPython的本地和中常用的virtualenvs安装。 我的问题是,随着IPython中一个新做的virtualenv内,系统IPython中接走,这是一个不同的版本比的virtualenv的Python和IPython中(一个2.7.x主场迎战3.5.x的),和欢闹接踵而至。
我觉得做聪明的事情,只要安装的东西,将有一个二进制的yourvirtualenv/bin
是立即运行rehash
或任何外壳您正在使用,以便正确的python / IPython中被捞起相似。 (得检查是否有合适的pip
后安装挂钩...)
解决方案没有脚本:
这可能是由于安装在您的系统 ,即python2还是python3 不同的Python版本引起的 。
运行命令$ pip --version
和$ pip3 --version
检查哪个点子是从Python的3倍 。 例如,你应该看到如下的版本信息:
pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
然后运行example.py
下面的命令脚本
$ python3 example.py
除去pathlib并重新安装。
删除sitepackages文件夹中的pathlib和使用PIP命令重新安装pathlib包。
PIP安装pathlib