【问题标题】:How can I use setuptools to generate a console_scripts entry point which calls `python -m mypackage`?如何使用 setuptools 生成调用 `python -m mypackage` 的 console_scripts 入口点?
【发布时间】:2015-03-03 06:29:50
【问题描述】:

我正在努力成为一名优秀的 Pythonista,并为我计划部署的包关注 PEP 338

我还尝试使用 setuptools entry_points{'console_scripts': ... } 选项在 python setuptools install 上生成我的可执行脚本。

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

以下是我做了一些没有成功的尝试:

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'],},

我一直在使用的主要资源:

【问题讨论】:

    标签: python deployment setuptools pep


    【解决方案1】:

    如何使用 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__.py中的main方法。 在这个包设计中python -m script_proj也调用了同样的main方法。

    【讨论】:

    • 这对我有用,但是在调用 myscript 时,我的 main() 函数被调用了两次。我的 main 函数只包含一个print("Success!") 语句,我得到了两次输出。
    • 补充一点,调用python -m script_proj只会产生1个输出
    • @rm-rf_,您是否使用if __name__ == "__main__": 来确保仅在将__main__.py 作为脚本而不是作为模块调用时才调用main?
    • 知道了!只需要 main.py 中的 if __name__ == "__main__"。愚蠢的错误。非常感谢。
    • 对于那些使用setup.cfg的人,请参阅this answer了解如何设置入口点。
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2013-10-25
    相关资源
    最近更新 更多