在 python 中的 setup.py 中根据用户及其偏好(动态)安装要求
Install requirements based on users and their preferences (dynamic) in setup.py in python
我已经实现了使用 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',
)
举个例子,假设我们想询问用户 he/she 是否要安装 numpy
。我试过 does_need_numpy = input('Do you want to install numpy? [y]es/[n]o')
但它不起作用,当我将它添加到 setup.py 时,当我想安装软件包 (pip install <package_name>
) 时遇到以下错误:
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)可能是解决方案。
谁能帮我实现预期的功能?
感谢@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_requires
和 extras_require
checkout 之间的区别,请阅读此 link。
我已经实现了使用 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',
)
举个例子,假设我们想询问用户 he/she 是否要安装 numpy
。我试过 does_need_numpy = input('Do you want to install numpy? [y]es/[n]o')
但它不起作用,当我将它添加到 setup.py 时,当我想安装软件包 (pip install <package_name>
) 时遇到以下错误:
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)可能是解决方案。
谁能帮我实现预期的功能?
感谢@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_requires
和 extras_require
checkout 之间的区别,请阅读此 link。