Python导入do n

2024-10-01 07:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

为了最终测试模块和子包,我在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

Tags: 方法pyimport文件夹mostinit错误module
3条回答

如果布局完全如图所示,并且假定为空__init__.py,则以下任何内容都应该在importest.py中工作:

import thepackage.thesubpackage.mary
from thepackage.thesubpackage import mary

在第一种情况下,需要将字符串引用为thepackage.thesubpackage.mary.marie。第二步,mary.marie。在

‘thepackage’、‘thesubpackage’等实际上是您正在使用的包的名称,还是您在这里用它们代替它们作为例子?如果名称不同,则可能是名称冲突。试试这个,但如果包的实际名称不同:

在“packtest”目录中,启动python解释器,然后键入:

>>> import thepackage

有用吗?如果是,请尝试:

>>> thepackage.__path__

您应该看到['thepackage']。如果你看到了不同的东西,那就是你的问题:你正在导入一个名为thepackage的不同包,它可能没有一个thesubpackage.mary模块,而这个模块正是ImportError的来源。我不知道为什么会这样;Python应该先在本地目录中搜索,然后再搜索路径和PYTHONPATH。在

编辑:还有一种可能:您的“thepackage”目录及其嵌套子目录的权限是什么?我做了一个实验:

$ mkdir something
$ touch something/__init__.py
$ chmod 000 something
$ python
>>> import something
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named something
>>>
$ chmod 744 something
$ python
>>> import something
>>>

要查看权限,请从“packtest”目录中的终端输入ls -l。输出的第一列是权限。在

importtest.py中使用此代码应该可以:

from thepackage.thesubpackage import mary 
print mary.marie

相关问题 更多 >