【发布时间】:2014-01-02 19:33:42
【问题描述】:
我知道这个问题已经在这里被问过很多次了,我可能已经阅读了大部分答案(包括this 和that)以及 python 文档,但仍然找不到我非常简单的答案进口问题。它是如此简单,以至于我必须错过一些愚蠢的东西,但我还没有看到它。 我已经设置了以下结构:
myproject
myscript.py
MyPackage
__init.py__
mymodule.py
我只想从myscript.py 加载mymodule.py(或应该相同的命令行python 解释器)。
myscript.py 包含:
#!/usr/bin/python
import MyPackage
__init.py__ 包含:
from . import mymodule
mymodule.py 包含
#!/usr/bin/python
def myfunction():
print "mymessage"
我的目标是从myscript.py 调用myfunction 但如果我尝试调用该模块,我会得到
$python myscript.py
Traceback (most recent call last):
File "myscript.py", line 2, in <module>
import MyPackage
ImportError: No module named MyPackage
我已经尝试过的:
- 我在 OSX 和 Ubuntu Linux 下尝试了一切,以减少 python 安装错误的可能性。
- 我将
PYTHONPATH环境变量设置为myproject目录以及.和两者。 - 我把
__init.py__留空了 - 我也尝试了从
myproject目录开始的 python 解释器的导入语句 -
我尝试了以下导入语句:
from MyPackage import mymodule import MyPackage.mymodule import MyPackage.mymodule as module都没有成功(同样的错误信息)。
如果我将mymodule.py 放在项目目录中而不使用包,则导入工作正常。但我不明白为什么从子包导入不起作用。
知道如何让它发挥作用吗?
感谢您的帮助!
【问题讨论】:
-
您需要验证
myproject目录是否列在sys.path中。在导入MyPackage之前,sys.path是否包含正确的目录? -
如果我启动解释器并执行
import sys和print sys.path它会正确显示包含“myproject”目录路径的列表:['', '/Users/michael/Entwicklung/python/myproject', ... ] -
对,所以包应该是可导入的。 包中可能存在不同的导入错误。你说你已经尝试了一个空的
__init__.py。您能否再试一次,但请确保删除所有*.pyc文件。也许在__init__.py中添加一个print "imported"行。