使用 Python 诗歌的安装后脚本

Posted

技术标签:

【中文标题】使用 Python 诗歌的安装后脚本【英文标题】:Post-install script with Python Poetry 【发布时间】:2020-05-05 05:36:35 【问题描述】:

Post-install script with Python setuptools

正是这个问题,但有诗歌,没有设置工具。

我想跑步

print('Installation finished, doing other things...')

安装我的包时。使用 Setuptools 可以只修改 setup.py,但在 Poetry 中专门没有 setup.py

我真正想做的是生成一个默认的.mypackage_config 文件并将其放在有用的地方。如果没有任意代码,我看不到如何执行此操作,但 Poetry does not allow arbitrary code 用于安装。有没有办法做到这一点?

【问题讨论】:

也许是这个? python-poetry.org/docs/pyproject/#scripts 诗歌的“脚本”部分有点误导。这是 Poetry 的 setuptools 'entry_points' 版本,它可以让您创建包的命令行入口。它不会自动运行脚本,也不是为了那个。 python-packaging.readthedocs.io/en/latest/… 【参考方案1】:

目前不可能(而且可能永远不会)

诗歌的整个理念是无需运行任何 Python 代码即可安装包。因此,自定义安装后脚本可能永远不会存在 (from the author of poetry, the link you gave in your question)。

你可以做什么

您可以使用 setuptools 并修改 setup.py 脚本,但通过删除对默认配置文件的需要可能更容易删除对安装后脚本的需要。

大多数 Python 工具,例如 black,倾向于采用默认配置参数,除非配置文件(例如 pyproject.toml 文件)中有覆盖它们的设置,例如:

[tool.black] # specifies this next section is the config for black
line-length = 88 # changes some configuration parameters from the defaults
target-version = ['py36', 'py37']

Jupyter 有一个命令 jupyterhub --generate-config 来生成默认配置文件 (source)。

如果你的包是一个库,而不是一个命令行工具,即你通过import-ing 在你的 Python 代码中使用它,我建议只将配置作为参数传递给构造函数/函数,因为这是将配置传递给库的标准方式。

例如,查看PySerial's API。您可以通过将 args 传递给构造函数 serial.Serial 来配置库,例如:

import serial
with serial.Serial(
    '/dev/ttyUSB0', # first config param, the port
    19200, # second config param, the baudrate
    timeout=5, # sets the timeout config param
) as ser:

【讨论】:

不知何故,我没有想到使用默认值,除非以其他方式覆盖。 --generate-config 命令也很有意义。一些非常好的想法。真的不需要在安装时运行任意代码。 别担心!老实说,我想到它的唯一原因是因为我已经看到了很多不同的 Python 包(和一些 Linux 程序)是如何做到的,我只是复制了我认为他们在我的回答中做得好的东西。祝你开发包好运!

以上是关于使用 Python 诗歌的安装后脚本的主要内容,如果未能解决你的问题,请参考以下文章

在使用 github 操作进行构建期间执行诗歌安装时,使用预编译的 numpy 包而不是构建它

将 Docker 与 Python 诗歌一起使用?

如何指定哪个python版本的诗歌应该创建venv?

使用 distutils / setuptools 执行 Python 脚本安装后

使用 distutils / setuptools 执行 Python 脚本安装后

使用诗歌从 conda-forge(例如 cartopy)安装预构建包,而不依赖 conda(仅使用通道)