我正在分发Python包。这取决于库lupa。我想运行一个后安装脚本,它依赖于,它在包安装后初始化包中的一些数据。在查看了StackOverflow周围的一些答案之后,我剥离的setup.py本质上如下所示:
# setup.py
from distutils.core import setup
from setuptools.command.install import install
class PostInstallCommand(install):
def run(self):
# Do normal setup
install.run(self)
# Now do my setup
from mymodule.script import init
init()
setup(
# ...
install_requires = [
# ...
"lupa >= 1.10",
# ...
],
cmdclass = {
'install': PostInstallCommand
}
)但是,在Python3.10上使用tox模拟新安装/安装时,我会得到以下错误:
File "C:\My\Computer\Temp\pip-req-build-pl0jria3\setup.py", line 26, in run
from mymodule.script import init
File "C:\My\Computer\Temp\pip-req-build-pl0jria3\mymodule\script.py", line 28, in <module>
import lupa
ModuleNotFoundError: No module named 'lupa'我的印象是,install_requires中的任何内容都将在setup()完成时安装,但情况似乎并非如此(也得到了这个答案的证实)。我能做些什么来确保lupa安装在mymodule.script.init()之前,还是安装过程的这一阶段完全超出了用户的控制范围?
发布于 2022-05-29 12:38:47
在做了大量的研究之后,这种后安装脚本似乎有点违背了setuptools的核心理念。,这意味着这样的请求不太可能被添加,或者至少在短期内被添加。
幸运的是,这在某种程度上是一种幸事;我的后安装脚本实际上是一个“更新”控制台入口点,用户在添加mods或更新任何软件包数据时都会调用这个入口点。这个脚本可以被(而且应该是)被用户多次调用,因此通过让它作为安装过程的一部分,它从一开始就帮助向用户介绍脚本的用途。这使得安装上的轻微烦恼是可以忍受的,至少在我的情况下是这样的。
https://stackoverflow.com/questions/71698842
复制相似问题