【问题标题】:How to set the bin scripts entry point in `setup.py`?如何在 `setup.py` 中设置 bin 脚本入口点?
【发布时间】:2020-11-17 15:50:11
【问题描述】:

我正在尝试创建一个可以使用pip 安装的包(在 Mac 上)。这个包在存储库中包含一个名为mycode.py 的主要可执行文件,我可以按如下方式在本地运行它:

python mycode.py --help

例如。

鉴于一些关于如何为可执行文件创建入口点的文档,我在setup.pysetup 函数中添加了以下内容:

setup(
    name="mycode",
    author="bbp-ou-nse",
    author_email="me@email.ch",
    version="0.0.1",
    description="Some tool",
    long_description="later",
    long_description_content_type="text/x-rst",
    url="later",
    entry_points='''
        [console_scripts]
        mycode=mycode.py:main
    ''',
    install_requires=[],
    packages=find_packages(),
    python_requires=">=3.6",
)

并安装它

pip install .

安装似乎成功了,但是当我现在在命令行上运行以下命令时

mycode.py --hekp

我得到了ImageMagick 的帮助!不是开玩笑!输出以

开头
Version: ImageMagick 7.0.10-34 Q16 x86_64 2020-10-09 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(3.1) 
Delegates (built-in): bzlib freetype gslib heic jng jp2 jpeg lcms lqr ltdl lzma openexr png ps tiff webp xml zlib
Usage: import [options ...] [ file ]

Image Settings:
  -adjoin              join images into a single multi-image file
  -border              include window border in the output image
  -channel type        apply option to select image channels

我做错了什么?如何修复它以便我可以理想地运行

mycode --help

在命令行上,它执行了代码mycode.py?

【问题讨论】:

  • 你在使用 setuptools 包吗?
  • from setuptools import setup 所以是的
  • 请在 setup.py 中添加 ss 或代码用于设置功能我通常会这样做python setuptools.setup( name="abc", version="alpha", description="DESC", long_description=long_description, long_description_content_type="text/markdown", url="URL", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ], python_requires='>=3.6', install_requires=REQUIREMENTS )
  • setup.py添加了更多代码
  • 可能是因为主代码不在bin中?会不会是这个问题?

标签: python setup.py


【解决方案1】:

我会为 setup.py 文件做这样的事情

然后 setup.cfg 被创建,内容如下。

[metadata]
name = mycode
version = attr: mycode.__version__
description = mycode desc
long_description = file: README.md
long_description_content_type = text/markdown
author = mycode

[flake8]
exclude = .git,.venv,.env,venv,env,__pycache__,docs/source/conf.py,build,dist

[options.entry_points]
console_scripts =
    mycode=mycode.main:main

mycode 文件夹将有一个 main.py,其中 main 函数在入口处被调用!

【讨论】:

  • 我不确定我是否遵循。我需要setup.pysetup.cfg 吗?
  • 请不要发布代码的屏幕截图。见meta.stackoverflow.com/questions/303812/…
  • 是的,请创建两个文件
  • @tripleee setup.py 是 op 已经写在这里的东西,仅供参考。检查问题的cmets
  • 你为什么想要让人们更难?
【解决方案2】:

正确的语法应该是这样的

setup(
    # ...
    entry_points={'console_scripts': ['mycode=mycode.py:main']}
    # ...
)

【讨论】:

  • 但是接下来主代码需要定义一个函数main ?
  • 或者代替main,输入你想要执行的现有函数的名称。
  • .py 如果您想遵循这种方法,则不需要,只需编写python setup( # ... entry_points={'console_scripts': ['mycode=mycode.main:main']} # ... ) mycode 文件夹将有一个 main.py,其中 main 函数以这种方式在入口处被调用!更好的做法是为配置创建一个 setup.cfg 文件
  • 还是不行。可执行文件不在 PATH 中。
  • 安装在哪里?
【解决方案3】:

我想通了,它似乎非常复杂并且没有记录!

这是我在setup.pysetup 函数中插入的内容:

entry_points={
    'console_scripts': ['mycode=mycode:foo']},
py_modules=['mycode'],

您不仅必须使用entry_points 定义入口点(请参阅HERE),还必须定义指向您的可执行文件(?)的py_modules 参数(未记录)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多