【问题标题】:Python __init__ file can't import modulesPython __init__ 文件无法导入模块
【发布时间】:2020-04-15 21:16:10
【问题描述】:

我知道以前有人问过这个问题,但我无法得到答案。

我的包文件夹看起来像这样,没有子文件夹,只是一个包含 .py 文件的平面包文件夹。

+Package
∣
∣--__init__.py
∣--moduleA.py
∣--moduleB.py

如果我从包文件夹中运行我的 test.py 脚本,导入、类和方法工作正常:

import moduleA.py
import moduleB.py

# ...stuff

现在,如果我尝试从外部导入 import Package 运行我的包,我会得到 \site-packages 之外

File "defaultPathTo\Python\Python38\lib\site-packages\Package\__init__.py", line 1, in <module>
    import moduleA
ModuleNotFoundError: No module named 'moduleA'

这是我的初始化文件

import moduleA
import moduleB

我尝试将内容更改为from moduleA import *from . import moduleA

from .moduleA import (whatever class) 似乎可以工作,但我不想从 moduleA.ClassA 更改我的所有类,因为它与其他模块中的类名冲突。

我想我总结了所有需要的信息。感谢您的帮助

【问题讨论】:

  • 您需要以某种方式将包放在路径上。您可以通过pip 进行安装,例如修改sys.path 以包含该目录的条目。
  • site-packages 肯定在 sys.path 上,Package 在 site-packages 下面,所以这可能不是路径问题。 moduleA 不能直接导入;导入需要导入Package
  • 这是“正确”的方式吗?我见过那个解决方案,但看起来很有侵略性,还没有看到其他软件包有它@a_guest
  • @John Gordon 我编辑了我的帖子,通常我会import Package
  • @G-BC “正确”应由您的用例定义。安装软件包会给您带来额外的好处,例如版本控制,同时修改 sys.path 是一个非常快速的解决方案。也可以修改PYTHONPATHsite.py

标签: python import module package


【解决方案1】:

使用 from . import moduleA 从我的包中进行所有导入就可以了。

我第一次尝试时可能做错了,因为我得到了no known parent folder

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多