首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行setup.py之前,是否可以确保已经安装了包的依赖项?

在运行setup.py之前,是否可以确保已经安装了包的依赖项?
EN

Stack Overflow用户
提问于 2022-03-31 20:32:47
回答 1查看 74关注 0票数 2

我正在分发Python包。这取决于库lupa。我想运行一个后安装脚本,它依赖于,它在包安装后初始化包中的一些数据。在查看了StackOverflow周围的一些答案之后,我剥离的setup.py本质上如下所示:

代码语言:javascript
复制
# 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模拟新安装/安装时,我会得到以下错误:

代码语言:javascript
复制
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()之前,还是安装过程的这一阶段完全超出了用户的控制范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-29 12:38:47

在做了大量的研究之后,这种后安装脚本似乎有点违背了setuptools的核心理念。,这意味着这样的请求不太可能被添加,或者至少在短期内被添加。

幸运的是,这在某种程度上是一种幸事;我的后安装脚本实际上是一个“更新”控制台入口点,用户在添加mods或更新任何软件包数据时都会调用这个入口点。这个脚本可以被(而且应该是)被用户多次调用,因此通过让它作为安装过程的一部分,它从一开始就帮助向用户介绍脚本的用途。这使得安装上的轻微烦恼是可以忍受的,至少在我的情况下是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71698842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档