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

我已经检查过系统了。这里有目录/site-packages。此外,我在工具包文件夹中有__init__.py.bin文件,以向Python表明这是一个包。我在examples目录中也有一个__init__.py.bin。

我不知道为什么Python无法在sys.path中找到该文件。什么好主意吗?会是权限问题吗?我需要一些执行许可吗?


当前回答

我有同样的问题(Python 2.7 Linux),我已经找到了解决方案,我想分享它。在我的情况下,我有下面的结构:

Booklet
-> __init__.py
-> Booklet.py
-> Question.py
default
-> __init_.py
-> main.py

在'main.py'中,我尝试了以下所有的组合,但都失败了:

from Booklet import Question
from Question import Question
from Booklet.Question import Question
from Booklet.Question import *
import Booklet.Question
# and many othet various combinations ...

解决办法比我想象的要简单得多。我把文件夹“小册子”重命名为“小册子”,就是这样。现在Python可以通过在'main.py'中使用代码来正常导入类Question:

from booklet.Booklet import Booklet
from booklet.Question import Question
from booklet.Question import AnotherClass

由此我可以得出结论,像“小册子”这样的包名(文件夹)必须以小写开头,否则Python会将其与类名和文件名混淆。

显然,这不是你的问题,但John Fouhy的回答非常好,这个帖子几乎有任何可能导致这个问题的东西。所以,这是另一件事,我希望这能帮助到其他人。

其他回答

致所有还有这个问题的人。我相信Pycharm与import混淆了。对我来说,当我写“从命名空间导入一些东西”时,前一行会用红色划线,表明有错误,但有效。然而,“from .namespace import something”没有下划线,但也不起作用。

Try

try:
    from namespace import something 
except NameError:
    from .namespace import something

在ubuntu apt-get安装程序中,python3版本的包通常被命名

python3-XYZ

以及python2版本

python-XYZ

根据经验,请尝试错误消息中提到的包的python3-XYZ或python-XYZ。 不需要猜测,使用RegEx搜索apt缓存。然后:

$ apt-cache search "python.*toolkit.*interface"
python3-cli-helpers - easy command-line apps with Python
python3-exam - Python module to help write better tests
python3-fltk - Python wrapper for the Fast Light Toolkit
python3-mpltoolkits.basemap - matplotlib toolkit to plot on map projections (Python 3)
python3-nltk - Python3 libraries for natural language processing
python3-onnx - Open Neural Network Exchange (ONNX) (Python)
python3-paraview - Parallel Visualization Application. python-support
python3-pyswarms - research toolkit for particle swarm optimization in Python
python3-wxgtk-media4.0 - Python 3 interface to the wxWidgets Cross-platform C++ GUI toolkit (wx.media)
python3-wxgtk-webview4.0 - Python 3 interface to the wxWidgets Cross-platform C++ GUI toolkit (wx.html2)
python3-wxgtk4.0 - Python 3 interface to the wxWidgets Cross-platform C++ GUI toolkit
python3-xapian - Xapian search engine interface for Python3
wxglade - GUI designer written in Python with wxPython

它没有找到它。

请注意,这种apt-get技巧有时也需要用于依赖的包。

我对python2.7的flask包有相同的错误消息,当我尝试时它消失了:

sudo apt-get install python-flask

因此,试一试:

sudo apt-get install python-[YOURPYTHONVERION]-[YOURERRORPACKAGE]

或者检查上面提到的依赖关系。

我的观点是:

随地吐痰:

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

This confused the hell out of me - went through posts and posts suggesting ugly syspath hacks (as you see my __init__.py were all there). Well turns out that game/oblivion.py and game/oblivion was confusing python which spit out the rather unhelpful "No module named RecordGroups". I'd be interested in a workaround and/or links documenting this (same name) behavior -> EDIT (2017.01.24) - have a look at What If I Have a Module and a Package With The Same Name? Interestingly normally packages take precedence but apparently our launcher violates this.

编辑(2015.01.17):我没有提到我们使用一个自定义启动器解剖这里。

在我的例子中,我使用sys.path.insert()导入一个本地模块,并从其他库中找不到模块。我不得不把sys.path.insert()放在报告模块未找到的导入下面。我认为最好的做法是将sys.path.insert()放在导入的底部。

我发现改变别名文件夹(Mac)的名称(通过GUI)会导致加载模块的问题。如果原文件夹名称已更改,请重新制作符号链接。我不确定这种行为有多普遍,但调试起来很令人沮丧。