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的回答非常好,这个帖子几乎有任何可能导致这个问题的东西。所以,这是另一件事,我希望这能帮助到其他人。
另一个原因导致了这个问题
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