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的评论,我想这是发生了什么事情:
- 您在Windows上编辑了
__init__.py
。 - Windows编辑器添加了一些非打印,可能是一个回车(在Windows中的行结束是CR / LF;在Unix中它只是LF),或者可能是一个CTRL-Z(Windows文件结束)。
- 您使用WinSCP将文件复制到您的unix框。
- WinSCP认为:“这有一些不是基本的文本,我会放一个.bin扩展名来表示二进制数据。”
- 缺less的
__init__.py.bin
(现在称为__init__.py.bin
)意味着python不能将工具包理解为一个包。 - 你在相应的目录中创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,稍后介绍。
- 您必须将文件__init__.py放在与您要导入的文件相同的目录中。
- 您不能尝试导入具有相同名称的文件,并且是来自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 python
& boost::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了一个文件夹,其名称与我从其他地方导入的模块冲突。 它没有导入外部模块,而是在这个文件夹里面,显然没有包含预期的模块。