Python 如何使用'--安装选项';?
我正在使用pip 1.4.1,试图从本地路径安装程序包,例如:Python 如何使用'--安装选项';?,python,pip,setuptools,Python,Pip,Setuptools,我正在使用pip 1.4.1,试图从本地路径安装程序包,例如: pip install /path/to/my/local/package pip install --install-option="--some-option" /path/to/my/local/package 这就是我想要的,这或多或少相当于运行python/path/to/my/local/package/setup.py install,但我想向我的包的setup.py install传递一些附加选项/参数 我知道这
pip install /path/to/my/local/package
pip install --install-option="--some-option" /path/to/my/local/package
这就是我想要的,这或多或少相当于运行python/path/to/my/local/package/setup.py install
,但我想向我的包的setup.py install传递一些附加选项/参数
我知道这可以通过--install选项实现,例如:
pip install /path/to/my/local/package
pip install --install-option="--some-option" /path/to/my/local/package
来自pythonvirtualenv的谷歌小组建议这是可能的
我不明白的是如何从setup.py中获取传入的“-some选项”。我试着查看sys.argv
,但无论我为“-install option=”,添加了什么,sys.argv
始终是这样的:
['-c', 'egg_info', '--egg-base', 'pip-egg-info']
如何从pip install获取作为“-install option”传入的值?我在安装pyside时遇到了这个问题
我需要指定--qmake
选项
这是您需要的表格:
pip install --install-option="--qmake=/usr/lib64/qt4/bin/qmake" PySide
您需要使用自己的自定义命令扩展install命令。在run
方法中,可以将选项的值公开到setup.py
(在我的示例中,我使用了一个全局变量)
使用setup
功能注册自定义安装命令
setup(
cmdclass={
'install': InstallCommand,
},
:
看来你的论点顺序不对
pip install/path/to/my/local/package--install option=“--someopt”
它运行良好,而且也可以
但这种方式是错误的:
缺少等号会导致众所周知的错误:
错误:选项--无法识别rabbitmq引擎
为了保持一致性,您可以向setup.py安装
和setup.py开发
(也称为pip安装-e
):(根据Ronen Botzer的答案构建)
或在开发模式下:
pip install -e --install-option="--someval=1" .
除此之外。
还有一件事需要注意的是,这并不重要
由于版本7.0,pip支持通过需求文件控制给定给setup.py的命令行选项。这将禁用对该软件包使用控制盘(缓存或其他),因为不存在用于控制盘的setup.py
但是,当您使用setup.py
构建控制盘时,可以使用
python setup.py bdist\u wheel安装-您的选项
自定义安装阶段,这将影响车轮组件的.dist info
。谢谢回答。不久前,我发现了解决这个问题的其他方法,所以我把它放在一边,但我会试试看。我记得,我认为它不起作用;安装本地软件包与从PyPI安装软件包之间存在一些差异,但我可能弄错了。此选项--qmake
与项目PySide
相关。要添加自定义选项,您需要注册setuptools.command.install
(和/或.develope
)的派生类来管理它(如上面的答案中所述)。顺便说一下,一旦您对install命令进行子类化,您应该能够在sys.argv
。只是为了澄清一下,在setup(…)如何使用cmdclass技术访问传入的变量?cmdclass设置有一个选项。没有它,pip会抱怨,不会执行该操作。它将传递给setup.py,在那里您可以检查sys.argv中的选项值。顺便说一句,在user\u options
中使用下划线似乎是被禁止的:distutils.errors.DistutilsGetoptError:无效的长选项名称“some\u option”(必须是字母、数字、连字符)
对,我试图使用注释掉的代码的“some_val”版本,结果是错误:选项--someval未被识别
。尽管python setup.py install-h
显示新标志被识别。这根本不起作用,pip接受了opt离子并将它们发送到/dev/null:(相关:我想发送include_dirs和library_dirs来构建我的模块,以前我会在setup()中填充include_dirs和library_dirs,现在该怎么做?@Rika不会通过install命令来完成这项工作。相反,请看
pip install . --install-option="--engine rabbitmq"
from setuptools import setup
from setuptools.command.install import install
from setuptools.command.develop import develop
class CommandMixin(object):
user_options = [
('someopt', None, 'a flag option'),
('someval=', None, 'an option that takes a value')
]
def initialize_options(self):
super().initialize_options()
# Initialize options
self.someopt = None
self.someval = 0
def finalize_options(self):
# Validate options
if self.someval < 0:
raise ValueError("Illegal someval!")
super().finalize_options()
def run(self):
# Use options
global someopt
someopt = self.someopt # will be 1 or None
super().run()
class InstallCommand(CommandMixin, install):
user_options = getattr(install, 'user_options', []) + CommandMixin.user_options
class DevelopCommand(CommandMixin, develop):
user_options = getattr(develop, 'user_options', []) + CommandMixin.user_options
setup(
...,
cmdclass={
'install': InstallCommand,
'develop': DevelopCommand,
}
pip install --install-option="--someval=1" --install-option="--someopt" .
pip install -e --install-option="--someval=1" .