【发布时间】: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是一个非常快速的解决方案。也可以修改PYTHONPATH或site.py。
标签: python import module package