不要这么做,没有必要开始研究python包结构。最好的方法是
不将脚本放在包中
.
有一个单独的
server.py
文件
外面
包的,并让它导入
app.server
或者其他模块来完成它的工作。这可以简单到:
import sys
from app.server import main
sys.exit(main(sys.argv[1:]))
除此之外,
python -m
可能已经更新
sys.argv[0]
指向完整的文件名(基本上等于
__file__
在正在执行的模块中),但是
__spec__
module spec
对象包含原始包名。如果你必须使用
蟒蛇-M
和
需要有正在运行的包的完整限定名
__main__
作为
main
属性:
print(__spec__.name)
因此,对于
package.main
模块,上面会打印
包装箱
而不是
圣米尼
:
$ mkdir package
$ touch package/__init__.py
$ echo 'if __name__ == "__main__": print("__spec__.name", __spec__.name)' > package/main.py
$ python3 -m package.main
package.main
所以如果你的重装机需要
sys.argv
遏制
-m package.main
,您可以更新
阿尔病毒
用:
import sys
sys.argv[:1] = ['-m', __spec__.name]