python3模块';s内部文件main()入口点

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

我创建了一个名为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 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安装
)。对我来说,您试图在错误的级别上修复某些内容,这不应该在代码中修复,而应该在设置中修复。(我想……)