现在我有一个具有以下布局的项目:
foo/
__init__.py
__main__.py
foo.py
在这种情况下,foo.py
实际上是主要的api文件,因此开发人员应该“从foo import foo”执行操作,但我也希望这样做以便最终用户可以运行{{1}并获得一个界面。
当我执行distutils安装时,创建~$ foo
因为(a)我不知道如何使用distutils,[不太重要]和(b)我不确定通常认为是什么做正确的事。
据我所知,我有三个选择:
让distutils变得更聪明,以便/usr/bin/__main__.py
创建
符号链接setup.py install
。这是我的
直接的直觉,我可能想出怎么做,
虽然我想做的事情都像黑客一样
我没有找到任何人谈论这个。
在分发之前将/usr/bin/foo -> $PYTHONLIB/foo/__main__.py
重命名为__main__.py
,并将调用修改为
distutils的设置为foo
。这与(1)非常相似,除非发生这种情况,我认为。
只是不要包含带有库包的接口。我觉得 这样主要取决于库/接口的大小 是否有意义。
我没有看到很多包含setup(scripts=['foo'], ...)
的软件包,如果有的话,所以我不确定人们是否只是不使用它们,或者我没有使用正确的软件包。我无法找到任何关于__main__.py
和distutils的博文或文章的事实告诉我,它不是一个特别受欢迎的组合。
答案 0 :(得分:3)
调用模块__main__.py
是一个坏主意,因为该名称具有特殊含义。而是使用__init__.py
中的main sentinel并创建一个exec python -m foo
的脚本。
答案 1 :(得分:1)
将Ignacio Vazquez-Abrams的回答与一些谷歌搜索结合起来,导致我找到this article about using _main_.py,我想我可能会采用以下几种布局:
foo/
foo/
__main__.py
...
scripts/
foo
其中scripts/foo
只是
#!/bin/sh
exec python foo "$@"
这似乎会干净利落地安装,和让人们无需安装即可使用我的模块,只需执行python path/to/foo
。