“导入错误:没有模块名为”试图运行Python脚本时(“ImportError: No module

2019-07-22 01:37发布

我试图运行启动,除其他事项外,一个Python脚本的脚本。 我得到一个导入错误:没有名为模块...,但是,如果我启动IPython中并导入在通过翻译以同样的方式在同一模块,该模块被接受。

这是怎么回事,我该如何解决? 我试图了解蟒蛇如何使用PYTHONPATH但我彻底糊涂了。 任何帮助将不胜感激。

Answer 1:

这个问题的出现是由于在命令行解释器的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或视窗 。



Answer 2:

只要创建一个名为空Python文件__init__.py这显示错误的文件夹下,当你运行Python项目。



Answer 3:

确保他们使用的是相同的解释两者。 这发生在我在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。



Answer 4:

这样做sys.path.append('my-path-to-module-folder')的工作,但要避免要使用该模块每次都做到这一点在IPython中,你可以添加export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"~/.bash_profile文件。



Answer 5:

主要的原因是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



Answer 6:

安装IPython中之前,我安装过的easy_install模块; 说sudo easy_install mechanize

安装IPython中后,我有IPython的识别模块,重新运行easy_install的。



Answer 7:

如果您从命令行中运行它,有时候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)

我不知道这是否是解决它的一个很好的方式,但是它确实为我工作。



Answer 8:

也有类似的问题,通过调用固定它python3而不是python ,我的模块是在Python3.5。



Answer 9:

这是我如何固定它:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)


Answer 10:

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

我已经IPython的本地和中常用的virtualenvs安装。 我的问题是,随着IPython中一个新做的virtualenv内,系统IPython中接走,这是一个不同的版本比的virtualenv的Python和IPython中(一个2.7.x主场迎战3.5.x的),和欢闹接踵而至。

我觉得做聪明的事情,只要安装的东西,将有一个二进制的yourvirtualenv/bin是立即运行rehash或任何外壳您正在使用,以便正确的python / IPython中被捞起相似。 (得检查是否有合适的pip后安装挂钩...)



Answer 11:

解决方案没有脚本:

  1. 开放的Spyder - >工具 - > PYTHONPATH经理
  2. 通过点击“添加路径”添加Python的路径。 例如: 'C:\用户\用户\应用程序数据\本地\程序\ Python的\ Python37 \ LIB \站点包'
  3. 点击“同步...”允许其他程序(例如Jupyter笔记本电脑)使用步骤2中设置的pythonpaths。
  4. 重新启动Jupyter如果它是开放的


Answer 12:

这可能是由于安装在您的系统 ,即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


Answer 13:

除去pathlib并重新安装。

删除sitepackages文件夹中的pathlib和使用PIP命令重新安装pathlib包。

PIP安装pathlib



文章来源: “ImportError: No module named” when trying to run Python script