29

I am trying to be a good Pythonista and following PEP 338 for my package I plan on deploying.

I am also trying to generate my executable scripts upon python setuptools install using setuptools entry_points{'console_scripts': ... } options.

How can I use entry_points to generate a binary that calls python -m mypackage (and passes *args, **kwargs) ?

Here are a few attempts I have made with no success:

setuptools(
...

(1)

entry_points=
       {'console_scripts': ['mypkg=mypkg.__main__'],},

(2)

entry_points=
       {'console_scripts': ['mypkg=mypkg.main'],},

(3)

entry_points=
       {'console_scripts': ['mypkg=python -m mypkg'],},

Primary resources I have been using:

4

1 回答 1

33

如何使用 entry_points 生成调用 python -m mypackage 的二进制文件(并传递 *args、**kwargs)?

我认为这是看待问题的错误方式。您不希望您的脚本调用python -m mypackage,但您希望脚本具有相同的入口点python -m mypackage

考虑这个简单的例子:

script_proj/
├── script_proj
│   ├── __init__.py
│   └── __main__.py
└── setup.py

和简约的 setup.py:

from setuptools import setup

setup(
    name="script_proj",
    packages=["script_proj"],
    entry_points = {
        "console_scripts": [
            "myscript = script_proj.__main__:main",
        ]
    }
)

__main__.py是一个虚拟模块并包含该main方法。

def main():
    print("Hello world!")

if __name__ == "__main__":
    main()

安装后,你就有了可执行文件,myscript它会调用main. __main__.py在这个包设计python -m script_proj中也调用了同样的main方法。

于 2015-01-05T17:57:31.603 回答