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中找到该文件。什么好主意吗?会是权限问题吗?我需要一些执行许可吗?


当前回答

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

其他回答

您必须将文件__ init__.py放在您要导入的文件所在的同一目录中。 不能尝试从PYTHONPATH上配置的两个文件夹中导入同名的文件。

例如: /etc/environment

PYTHONPATH = PYTHONPATH:美元/ opt / folder1: / opt / folder2

/opt/folder1/foo

/opt/folder2/foo

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

从foo import…>>> importerror:没有foo模块

我解决了我自己的问题,我将写一篇总结错误的事情和解决方案:

该文件需要被确切地称为__init__.py。如果扩展名不同,例如在我的例子中是.py.bin,那么Python无法通过目录移动,然后就无法找到模块。要编辑这些文件,您需要使用Linux编辑器,例如vi或nano。如果你使用Windows编辑器,它会写一些隐藏字符。

另一个影响它的问题是,我用root安装了另一个Python版本,所以如果有人使用本地安装的Python,请确保运行程序的Python安装是本地Python。要检查这一点,只需执行哪个python,并查看可执行文件是否在您的本地目录中。如果不是,请更改路径,但要确保本地Python目录比其他Python目录更早。

如果你时间紧迫,其他方法都失败了:

import sys
import os
wd = '/path/to/current/script/'
sys.path.append(wd)
os.chdir(wd)
print(os.getcwd())
print(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的回答非常好,这个帖子几乎有任何可能导致这个问题的东西。所以,这是另一件事,我希望这能帮助到其他人。

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