我知道这个问题在这里已被多次询问了,我可能会阅读大部分答案(包括这个和那个)以及python文档,但仍然找不到我非常简单的导入问题的答案.这很简单,我必须错过一些愚蠢的东西,但我还没有看到它.我设置了以下结构:
myproject myscript.py MyPackage __init.py__ mymodule.py
我只是想mymodule.p
从myscript.py
(或命令行python解释器,应该是相同的)加载y .
myscript.py
包含:
#!/usr/bin/python import MyPackage
__init.py__
包含:
from . import mymodule
mymodule.py
包含
#!/usr/bin/python def myfunction(): print "mymessage"
我的目标是打电话给myfunction
,myscript.py
但如果我试着打电话给我得到的模块
$python myscript.py Traceback (most recent call last): File "myscript.py", line 2, in我已经尝试过的:import MyPackage ImportError: No module named MyPackage
我在OSX和Ubuntu Linux下尝试了一切,以减少python安装错误的可能性.
我将PYTHONPATH
环境变量设置为myproject
目录以及to .
和to.
我__init.py__
留空了
我也尝试了从myproject
目录中启动的python解释器的import语句
我尝试了以下import语句:
from MyPackage import mymodule import MyPackage.mymodule import MyPackage.mymodule as module
一切都没有成功(相同的错误信息).
如果我mymodule.py
在不使用包的情况下放入项目目录,导入工作正常.但我不明白为什么从子包导入不起作用.知道我怎么能让它工作?
感谢帮助!
在编辑帖子的格式时,我注意到你正在调用你的文件__init.py_
.这导致python无法将您的MyPackage
目录识别为包,因此ImportError: No module named MyPackage
.
它应该是__init__.py
(名称__init__
,扩展名.py
).然后它将工作,您的项目结构和导入语句是正确的.
但有一点:您还应该使用lower_underscore
样式来命名包.包也是Python中的模块,它们应遵循相同的命名约定.有关建议的样式和命名约定的详细信息,请参阅PEP8.这只是一个惯例,它与您的问题无关.