为了最终测试模块和子包,我在MacOSX Mavericks上创建了一个新文件夹。 文件夹的位置是桌面:
packtest
|-- importtest.py
|-- thepackage
|-- __init__.py
|-- thesubpackage
|-- __init__.py
|-- mary.py
在玛丽.py包含变量:
^{pr2}$没别的了。在
在导入测试.py我想把它打印出来。 我尝试了不同的导入方法,基本上就是这个Python: importing a sub‑package or sub‑module线程中声明的那些方法。在
我还试图将__all__ = ["mary"]
添加到subpackage文件夹中的__init__.py
。在
但我所做的一切都没有成功。有什么想法吗?在
编辑:
在尝试建议的解决方案时,我发现了以下错误:
import thepackage.thesubpackage.mary
print thepackage.thesubpackage.mary.marie
结果:
$ python importtest.py
Traceback (most recent call last):
File "importtest.py", line 1, in <module>
import thepackage.thesubpackage.mary
ImportError: No module named thepackage.thesubpackage.mary
尝试时:
from thepackage.thesubpackage import mary
print mary.marie
错误是:
$ python importtest.py
Traceback (most recent call last):
File "importtest.py", line 1, in <module>
from thepackage.thesubpackage import mary
ImportError: No module named thepackage.thesubpackage
如果布局完全如图所示,并且假定为空
__init__.py
,则以下任何内容都应该在importest.py
中工作:在第一种情况下,需要将字符串引用为
thepackage.thesubpackage.mary.marie
。第二步,mary.marie
。在‘thepackage’、‘thesubpackage’等实际上是您正在使用的包的名称,还是您在这里用它们代替它们作为例子?如果名称不同,则可能是名称冲突。试试这个,但如果包的实际名称不同:
在“packtest”目录中,启动python解释器,然后键入:
>>> import thepackage
有用吗?如果是,请尝试:
>>> thepackage.__path__
您应该看到
['thepackage']
。如果你看到了不同的东西,那就是你的问题:你正在导入一个名为thepackage
的不同包,它可能没有一个thesubpackage.mary
模块,而这个模块正是ImportError的来源。我不知道为什么会这样;Python应该先在本地目录中搜索,然后再搜索路径和PYTHONPATH。在编辑:还有一种可能:您的“thepackage”目录及其嵌套子目录的权限是什么?我做了一个实验:
要查看权限,请从“packtest”目录中的终端输入
ls -l
。输出的第一列是权限。在在
importtest.py
中使用此代码应该可以:相关问题 更多 >
编程相关推荐