Python错误“ImportError:No module named”

Python安装在本地目录中。

我的目录树如下所示:

(local directory)/site-packages/toolkit/interface.py 

我的代码在这里:

 (local directory)/site-packages/toolkit/examples/mountain.py 

为了运行这个例子,我写了python mountain.py ,在代码中我有:

 from toolkit.interface import interface 

我得到的错误:

 Traceback (most recent call last): File "mountain.py", line 28, in ? from toolkit.interface import interface ImportError: No module named toolkit.interface 

我已经检查sys.path ,在那里我有目录/site-packages 。 另外,我在工具包文件夹中有__init__.py.bin文件来向Python表明这是一个包。 我在示例目录中也有一个__init__.py.bin

我不知道为什么Python在sys.path找不到文件。 有任何想法吗? 这可能是一个权限问题? 我需要执行权限吗?

根据你对orip的post的评论,我想这是发生了什么事情:

  1. 您在Windows上编辑了__init__.py
  2. Windows编辑器添加了一些非打印,可能是一个回车(在Windows中的行结束是CR / LF;在Unix中它只是LF),或者可能是一个CTRL-Z(Windows文件结束)。
  3. 您使用WinSCP将文件复制到您的unix框。
  4. WinSCP认为:“这有一些不是基本的文本,我会放一个.bin扩展名来表示二进制数据。”
  5. 缺less的__init__.py.bin (现在称为__init__.py.bin )意味着python不能将工具包理解为一个包。
  6. 你在相应的目录中创build__init__.py ,一切正常…?

是否

 (local directory)/site-packages/toolkit 

有一个__init__.py

要导入你的目录,每个目录都必须有一个__init__.py文件。

在* nix上,也要确保PYTHONPATHconfiguration正确,特别是它有这样的格式:

  .:/usr/local/lib/python 

(注意.:一开始,也可以search当前目录)

也可能在其他位置,具体取决于版本:

  .:/usr/lib/python .:/usr/lib/python2.6 .:/usr/lib/python2.7 and etc. 

我解决了自己的问题,并且写下了错误和解决scheme的总结:

该文件需要完全调用__init__.py 。 如果扩展名不同,比如在我的.py.bin那么Python不能移动目录,然后找不到这些模块。 编辑文件需要使用Linux编辑器,比如vi或nano 。 如果您使用Windows编辑器,则会写入一些隐藏的字符。

另一个影响它的问题是我有另一个由root安装的Python版本,所以如果有人正在使用本地安装的python,请确保运行程序的Python安装是本地Python。 要检查这个,只要做which python ,看看这个可执行文件是否在你的本地目录下。 如果没有,请更改path,但要确保本地Python目录比其他Python更早。

我在LPTHW做这个练习时碰到了一个非常类似的东西; 我永远不能让Python认识到我在打电话的目录中有文件。 但是我终于可以把它做好。 我所做的和我所推荐的是试试这个:

(注意:从你最初的文章来看,我假设你使用的是一个基于NIX的机器,并且正在从命令行运行,所以这个build议是针对这个做的的,因为我运行的是Ubuntu,这就是我所做的)

1)将目录(cd)更改到您的文件所在目录的上方 。 在这种情况下,您正尝试运行mountain.py文件,并尝试调用位于不同目录中的toolkit.interface.py模块。 在这种情况下,您将转到包含这两个文件path的目录(或换句话说,这两个文件的path共享的最接近的目录)。 在这种情况下是toolkit目录。

2)当您在tookit目录中时,在命令行中input以下代码行:

export PYTHONPATH=.

这将您的PYTHONPATH设置为“。”,这基本上意味着您的PYTHONPATH现在将查找您当前目录中的任何被调用的文件(并且更多地指向您所在目录的子目录分支中的点)所以它不只是查看当前目录,而是查看当前目录中的所有目录)。

3)在上面的步骤中设置了PYTHONPATH后,从当前目录( toolkit目录)运行你的模块。 Python现在应该find并加载你指定的模块。

希望这可以帮助。 我自己也很沮丧

要将目录标记为包,您需要一个名为__init__.py的文件,这有帮助吗?

对。 您需要该目录包含__init__.py文件,该文件是初始化包的文件。 在这里,看看这个 。

需要使用__init__.py文件来使Python将目录视为包含包; 这是为了防止具有通用名称的目录(如string)无意中隐藏稍后在模块searchpath中发生的有效模块。 在最简单的情况下,__init__.py可以只是一个空文件,但也可以执行包的初始化代码,或者设置__all__variables,稍后介绍。

  1. 您必须将文件__init__.py放在与您要导入的文件相同的目录中。
  2. 您不能尝试导入具有相同名称的文件,并且是来自PYTHONPATH上configuration的2个文件夹的文件。

例如:/ etc / environment

PYTHONPATH = $ PYTHONPATH中:/ opt /资料夹中:/ opt /文件夹2

/select/文件夹1 /富

/select/文件夹2 /富

而且,如果你正在尝试导入foo文件,python将不知道你想要哪一个。

从foo导入… >>> importerror:没有名为foo的模块

Linux:导入的模块位于/usr/local/lib/python2.7/dist-packages

如果您使用的是以C编译的模块,请不要忘记在sudo setup.py install之后chmod .so文件。

 sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so 

在我的情况下,问题是我连接到debugging pythonboost::Python ,这需要扩展名为FooLib_d.pyd ,而不仅仅是FooLib.pyd ; 重命名文件或更新CMakeLists.txt属性修复了错误。

使用PyCharm (JetBrains套件的一部分),您需要将您的脚本目录定义为Source:
Right Click > Mark Directory as > Sources Root

我的两分钱:

在这里输入图像描述

吐:

 Traceback (most recent call last): File "bash\bash.py", line 454, in main import bosh File "Wrye Bash Launcher.pyw", line 63, in load_module mod = imp.load_source(fullname,filename+ext,fp) File "bash\bosh.py", line 69, in <module> from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \ ImportError: No module named RecordGroups 

这让我困惑 – 通过post和postbuild议丑陋的syspath黑客(因为你看到我的__init__.py都在那里)。 事实certificate,游戏/ oblivion.py和游戏/遗忘是令人困惑的python,吐出了相当无用的“无模块名为RecordGroups”。 我会感兴趣的解决方法和/或链接logging这(同名)的行为 – >编辑(2017.01.24) – 看看如果我有一个模块和一个相同的名称包? 有趣的是,通常情况下, 软件包优先,但显然我们的启动程序违反了这一点。

编辑(2015.01.17):我没有提到我们在这里使用了一个定制的发射器 。

如果您尝试了上面提供的所有方法但失败了,也许您的模块内置模块具有相同的名称 。 或者,一个名称相同的模块存在于sys.path优先级高于您的模块的文件夹中。

要debugging,说你from foo.bar import baz投诉ImportError: No module named bar 。 更改为import foo; print foo import foo; print foo ,它将显示foo的path。 这是你所期望的吗?

如果不是,请重命名foo或使用绝对导入 。

一个简单的解决scheme是使用python -m pip install <library-name>来安装模块,而不是使用pip install <library-name>你可以在pipe理限制的情况下使用sudo

刚刚遇到同样的问题后,我发现我的决议是从我的项目中删除所有pyc文件,似乎这些caching的文件以某种方式导致此错误。

最简单的方法是在Windows资源pipe理器中导航到我的项目文件夹,并search*.pyc ,然后select全部( Ctrl + A )并删除它们( Ctrl + X )。

它可能我可以通过删除特定的pyc文件来解决我的问题,但我从来没有试过这个

我面临同样的问题: Import error 。 另外库已经被正确安装了100%。 问题的根源是在我的电脑上安装了3版本的python(anaconda包)。 这就是为什么图书馆没有安装在正确的地方。 之后,我刚刚在我的IDE PyCharm中更改为正确版本的python。

通过编写print (sys.path)解决了我的问题,发现python使用了过时的包,尽pipe干净的安装。 删除这些制作的Python会自动使用正确的包。

我有同样的错误。 这是由于有人在我的脚本文件夹中创build了一个文件夹,其名称与我从其他地方导入的模块冲突。 它没有导入外部模块,而是在这个文件夹里面,显然没有包含预期的模块。