python3模块';s内部文件main()入口点
我创建了一个名为myutils的模块。这是我使用的文件结构:python3模块';s内部文件main()入口点,python,python-3.x,module,python-import,python-module,Python,Python 3.x,Module,Python Import,Python Module,我创建了一个名为myutils的模块。这是我使用的文件结构: ./mypackages ./mypackages/myutils ./mypackages/myutils/util1.py ./mypackages/myutils/util2.py ./myexecs ./myexecs/user_executable1.py 我正确设置了PYTHONPATH=。/ 在/myexecs/user\u executable1.py中,我可以轻松使用UTIL: from my_packages i
./mypackages
./mypackages/myutils
./mypackages/myutils/util1.py
./mypackages/myutils/util2.py
./myexecs
./myexecs/user_executable1.py
我正确设置了PYTHONPATH=。/
在/myexecs/user\u executable1.py
中,我可以轻松使用UTIL:
from my_packages import myutils
myutils.util1.func1()
在util1.py中,我可以使用util2.py:
from . import util2
util2.func2()
当我希望直接使用util1.py作为主入口点时,问题就出现了。它有一个
if\uuuuuu name\uuuuuu==“\uuuuuu main\uuuuuuu”:main()
入口点,但如果我直接执行它,它将无法导入util2(from.import util1
失败)
如果我使用python-m mypackages.myutils.util1执行它,它会成功
你知道如何让util1使用从导入其sibling吗。导入…
并且能够直接从cmd执行它,而无需将其作为模块执行?只需在代码中的任何地方使用单独的导入(from.import util2
将是from mypackages.myutils import util2
)然后用python-m myexecs.user_executable1运行exec,你会很好的我认为这两种解决方案都可以单独运行。但两者都不合逻辑。第一种方法使包不可移动。它只在当前目录下工作。第二种方法很烦人,而且使用脚本会让人不舒服。你有不同的想法吗?我觉得在任何地方使用绝对导入,并使用python运行模块-m
更符合逻辑。当你制作一个脚本时,你需要导入你的软件包,有时是从另一个文件夹导入,但这是纯Python的-唯一需要解决的问题是“如何以干净的方式导入这个模块”(我会说:setup.py
+venv
+pip安装
)。对我来说,您试图在错误的级别上修复某些内容,这不应该在代码中修复,而应该在设置中修复。(我想……)