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


当前回答

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

其他回答

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

例如: /etc/environment

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

/opt/folder1/foo

/opt/folder2/foo

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

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

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

另一个原因导致了这个问题

file.py

#!/bin/python
from bs4 import BeautifulSoup

如果你的默认python是pyyhon2

$ file $(which python)
/sbin/python: symbolic link to python2

File.py在这种情况下需要python3 (bs4) 你不能像这样用python2执行这个模块:

$ python file.py
# or
$ file.py
# or
$ file.py # if locate in $PATH

两种方法来修复这个错误,

# should be to make python3 as default by symlink
$ rm $(which python) && ln -s $(which python3) /usr/bin/python
# or use alias
alias python='/usr/bin.../python3'

或者将file.py中的shebang修改为

#!/usr/bin/...python3

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

对我来说,这是件非常愚蠢的事。我使用pip3 install安装了这个库,但是我运行的程序是python program.py,而不是python3 program.py。