【问题标题】:Install requirements based on users and their preferences (dynamic) in setup.py in python在 python 的 setup.py 中根据用户及其偏好(动态)安装要求
【发布时间】:2021-12-17 18:35:55
【问题描述】:

我已经实现了一个使用pip install 命令安装需求的代码,没有任何问题。为了不为用户安装不必要的包,需要问他们问题(输入)并根据他们的回答安装包。

这是我当前的 setup.py 文件,它运行良好,但安装了所有软件包:

setuptools.setup(
    name="backbone",
    version="1",
    entry_points={
        "console_scripts": [
            'backbone_cli=backbone.backbone:main'
        ]
    },
    author="Mostafa Ghadimi",
    author_email="<my_email>",
    long_description=long_description,
    long_description_content_type="text/markdown",
    install_requires=requirements,
    include_package_data=True,
    url="https://github.com/mostafaghadimi/backbone",
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    packages=setuptools.find_packages(),
    python_requires=">=3.6",
    license='MIT',
)

举个例子,假设我们想问用户他/她是否想安装numpy。我已经尝试过does_need_numpy = input('Do you want to install numpy? [y]es/[n]o'),但它不起作用,当我将它添加到 setup.py 时,在我想安装包时遇到以下错误(pip install &lt;package_name&gt;):

File "/tmp/pip-req-build-ldgfq6l6/setup.py", line 11, in <module>
        does_need_numpy = input('Do you want to install numpy? [y]es/[n]o')
    EOFError: EOF when reading a line

正如我所发现的,有一些像 cmdclass install 这样的功能可能是解决方案。

谁能帮我实现预期的功能?

【问题讨论】:

  • 不要要求用户使用extras_require(另请参阅stackoverflow.com/search?q=[setuptools]+extras_require)并教用户只安装他们需要的附加功能。
  • @phd 感谢您的回答。有没有办法询问用户输入并根据他们的输入(决定)安装包?
  • 不适用于pip。它旨在以非交互方式使用。无论如何pip install &lt;some.whl&gt; 不使用setup.pysetup.py 在构建阶段使用,但不在安装阶段使用。
  • @phd 感谢您提供帮助的 cmets。你特地帮我解决了问题!

标签: python pip setuptools python-packaging


【解决方案1】:

感谢@phd 的评论。正如我发现的那样,没有任何方法可以使用pip install 命令根据用户输入交互式安装要求。所以为了满足需求,我们不得不使用extras_require

setuptools.setup 函数中添加extras_require 作为参数后问题得到解决。

setuptools.setup(
    name="backbone",
    version="1",
    entry_points={
        "console_scripts": [
            'backbone_cli=backbone.backbone:main'
        ]
    },
    author="Mostafa Ghadimi",
    author_email="<my_email>",
    long_description=long_description,
    long_description_content_type="text/markdown",
    install_requires=requirements,
    include_package_data=True,
    url="https://github.com/mostafaghadimi/backbone",
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    packages=setuptools.find_packages(),
    python_requires=">=3.6",
    license='MIT',
    extras_require={
        'pandas_numpy': [
            'numpy',
            'pandas_numpy',
        ]
    },
)

并且可以在虚拟环境中使用以下命令在本地安装。

pip install git+https://$GITLAB_USERNAME:$GITLAB_PASSWORD@$GITLAB_URL[pandas_numpy]

如需了解更多信息并了解install_requiresextras_require checkout 之间的区别,请点击此链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2019-12-13
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多