使用 pyproject.toml 和 setuptools 进行 Python 打包

问题描述 投票:0回答:1

我想要实现的目标

我的目标是,安装 python 包后,能够运行命令,而不必在命令前键入

python

示例

$ excommand
Hello, World!

目录结构

.
├── example
    ├── __init__.py
    └── exmodule.py
├── .venv
├── pyproject.toml
└── setup.cfg

exmodule.py

def command():
    print("Hello, World!")

pyproject.toml

[build-system]
requires = [ "setuptools" ]
build-backend = "setuptools.build_meta"

设置.cfg

[metadata]
name = Example
version = 1.0.0

[options]
packages = find:

[options.entry_points]
console_scripts = 
    excommand = example.exmodule:command

问题

在终端执行以下命令后:

$ python3 -m build --wheel

终端上没有打印任何警告或错误,但命令不起作用:

$ excommand
zsh: command not found: excommand

尝试了什么

在使用 TOML 文件之前,我只是将

setup.cfg
文件与
setup.py
一起使用,但是当使用命令
pip install .
安装软件包时,我被警告说未来版本的 pip 将保证使用 TOML 文件。它也不起作用,所以尝试使用 TOML。

python command-line-interface setuptools python-packaging pyproject.toml
1个回答
0
投票

使用较新的 setuptools 和 pyproject.toml 您可以使用: (仅包含相关部分)

[build-system]
build-backend = 'setuptools.build_meta'
requires = ["setuptools>=69.2.0", "setuptools-scm"]

[tool.setuptools]
packages = ["yourpackage"]

[project.scripts]
yourbinary = "yourpackage.yourpackage:main"

您必须在 yourpackage.yourpackage.py 中创建一个

main()
函数:

#<all your fantastic code>

def main():
    parser = argparse.ArgumentParser(description='superdupermain')
    parser.add_argument('--debug', help='debug', action='store_true')
    :

if __name__ == '__main__':
   main()

当您在

pip install yourpackage
中运行
<venv>
时,它将安装:

    <venv>\lib\site-packages\yourpackage\yourpackage.py
    <venv>\scripts\yourbinary.exe

它将在您的路径中,以便您可以执行

yourbinary.exe
对于 Linux 来说,它将是一个可执行文件
yourbinary

© www.soinside.com 2019 - 2024. All rights reserved.