【发布时间】:2020-12-06 21:09:33
【问题描述】:
当我运行 python -m moduala.test 和 python moduala/testa.py 之类的东西时,我在 python3 中看到了不同的包处理行为。在 -m 情况下,在 testa.py 中导入 moduala.modualb.pkgx 可以工作,而在另一种情况下,它们不起作用。
python --version
# Python 3.6.9
mkdir -p testpyproj/pkga/pkgb
cd testpyproj/
touch pkga/__init__.py
touch pkga/pkgb/__init__.py
echo 'print("# python!")' >pkga/pkgb/modx.py
echo 'from pkga.pkgb import modx' > pkga/test.py
python -m pkga.test
# python!
python pkga/test.py
# Traceback (most recent call last):
# File "pkga/test.py", line 1, in <module>
# from pkga.pkgb import modx
# ImportError: No module named pkga.pkgb
从手册页我希望这些是相同的:
-m module-name Searches sys.path for the named module and runs the corresponding .py file as a script.
python -m 和 python [file] 用于加载模块和处理包有什么区别?
为什么python[文件]找不到pkga.pkgb?
【问题讨论】:
-
谢谢@Armagon 这个对建议问题的评论回答了我的问题:stackoverflow.com/a/62923810/223960
-
@Asocia 是的,尤其是 Mark Rucker 的回答
标签: python python-3.x python-module python-packaging