代码之家  ›  专栏  ›  技术社区  ›  Shamoon

我可以从git中pip install-e并将参数传递给安装程序吗。皮耶?

  •  0
  • Shamoon  · 技术社区  · 6 年前

    我正在使用pip 1.4.1,试图从本地路径安装程序包,例如:

    pip install /path/to/my/local/package
    

    这就是我想要的,或多或少相当于跑步 python /path/to/my/local/package/setup.py install ,但我想将一些附加选项/参数传递给我的包的设置。py安装。

    我理解 from the pip documentation 这是可能的 --install-option 选项,例如:

    pip install --install-option="--some-option" /path/to/my/local/package
    

    This post 来自python virtualenv谷歌集团的研究表明这是可能的。

    我不明白的是如何从安装程序中获取传入的“-some option”。皮耶。我试着看了看 sys.argv ,但不管我用“-install option=”, 系统。argv 总是这样:

    ['-c', 'egg_info', '--egg-base', 'pip-egg-info']
    

    如何从pip install中获取作为“-install option”传入的值?

    0 回复  |  直到 11 年前
        1
  •  22
  •   Ronen Botzer    10 年前

    您需要使用自己的自定义命令扩展install命令。在 run 方法,您可以向其公开选项的值 setup.py (在我的示例中,我使用了一个全局变量)。

    from setuptools.command.install import install
    
    
    class InstallCommand(install):
        user_options = install.user_options + [
            ('someopt', None, None), # a 'flag' option
            #('someval=', None, None) # an option that takes a value
        ]
    
        def initialize_options(self):
            install.initialize_options(self)
            self.someopt = None
            #self.someval = None
    
        def finalize_options(self):
            #print("value of someopt is", self.someopt)
            install.finalize_options(self)
    
        def run(self):
            global someopt
            someopt = self.someopt # will be 1 or None
            install.run(self)
    

    将自定义安装命令注册到 setup 作用

    setup(
        cmdclass={
            'install': InstallCommand,
        },
        :
    

    看来你的论点顺序不对

    pip install /path/to/my/local/package --install-option="--someopt"

        2
  •  9
  •   user2561747    6 年前

    为了保持一致性,您可以在两者中添加一个选项 setup.py install setup.py develop (又名 pip install -e ):(根据罗宁·博泽的回答)

    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,如:

    pip install --install-option="--someval=1" --install-option="--someopt" .
    

    或者在开发模式下:

    pip install -e --install-option="--someval=1" .
    
        3
  •  6
  •   scrutari    7 年前

    它运行良好,而且 documented .

    from setuptools.command.install import install
    
    class InstallCommand(install):             
        user_options = install.user_options + [
            ('engine=', None, '<description for this custom option>'),
        ]                                      
    
        def initialize_options(self):          
            install.initialize_options(self)   
            self.engine = None  
    
        def finalize_options(self):                   
            print("value of engine is", self.engine)
            install.finalize_options(self)            
    
        def run(self):                                
            print(self.engine)                       
            install.run(self)                         
    
    setup(
    ...
    cmdclass={'install': InstallCommand}
    ...
    )
    

    一个常见的错误是通过考试 setup 你可以把它传递给pip 设置 直接地 使用pip的选项如下:

    pip install . --install-option="--engine=rabbitmq"
    

    但这种方式是错误的:

    pip install . --install-option="--engine rabbitmq"
    

    缺少等号会导致众所周知的错误:

    错误:选项--无法识别rabbitmq引擎

        4
  •  1
  •   cuthb3rt    11 年前

    我在安装pyside时遇到了问题。

    我需要详细说明 --qmake 选项

    这是您需要的表格:

    pip install --install-option="--qmake=/usr/lib64/qt4/bin/qmake" PySide
    
        5
  •  -1
  •   Izana    6 年前

    除此之外 great anwser . 还有一件事需要注意的是 --install-options work with wheel

    由于版本7.0,pip支持控制指定给安装程序的命令行选项。通过需求文件。这将禁用该软件包的控制盘(缓存或其他方式),如设置所示。py不适用于车轮。

    然而,当你用 setup.py ,你可以使用

    python setup.py bdist_wheel install -your-options
    

    自定义安装阶段,这将影响 .dist-info 车轮组件。