我试图运行一个脚本,启动,除其他外,一个python脚本。我得到一个ImportError:没有模块命名为…但是,如果我启动ipython并通过解释器以相同的方式导入相同的模块,则该模块将被接受。

发生了什么事,我该怎么解决?我试图理解python如何使用PYTHONPATH,但我完全困惑了。任何帮助都将不胜感激。


当前回答

import sys
sys.path.append('/Users/{user}/Library/Python/3.7/lib/python/site-packages')
import ta

其他回答

有一个类似的问题,通过调用python3而不是python来修复它,我的模块是Python3.5。

主要原因是系统。Python和IPython的路径不同。

请参考lucypark link,解决方案适合我的情况。它发生在安装opencv by

Conda安装opencv

在iPython中导入错误,有三个步骤来解决这个问题:

import cv2
ImportError: ...

1. 使用以下命令检查Python和iPython中的路径

import sys
sys.path

你会发现Python和Jupyter的结果不同。第二步,只需使用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

在vi中,在文件后面追加:

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

DONE

如果你从命令行运行它,有时候python解释器不知道在哪里寻找模块。

下面是我项目的目录结构:

/project/apps/..
/project/tests/..

我是按照命令运行的:

>> cd project

>> python tests/my_test.py

运行以上命令后,我得到以下错误

no module named lib

Lib在my_test.py中导入

我打印了sys。路径,并发现我正在工作的项目的路径在系统中不可用。路径列表

我在脚本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)

我不确定这是不是解决问题的好方法,但对我来说确实有效。

我有一个类似的问题与我的Jupyter实验室设置,我通过检查Jupyter实验室日志打开解决。这告诉我,虚拟环境(pipenv)无法定位Jupyter Lab,所以它使用了一个共享版本(来自Python的早期安装)。

我创建了一个requirements.txt文件,发现我没有在这个新环境中安装Jupyter Lab。安装它解决了导入错误。

我发现了这种差异的另一个来源:

我在本地和virtualenvs中都安装了ipython。我的问题是,在一个带有ipython的新创建的virtualenv中,系统ipython被选中,这与virtualenv中的python和ipython是不同的版本(2.7。X vs. a . 3. X),然后是笑声。

我认为当你在virtualenv/bin中安装二进制文件时,聪明的做法是立即为你正在使用的任何shell运行rehash或类似的程序,这样正确的python/ipython就会被拾取。(必须检查是否有合适的pip安装后挂钩…)