使用pip安装运行自定义代码失败

时间:2016-11-04 23:37:14

标签: python pip setuptools

我有一个Python包,我用pip分发。我需要添加一些自定义代码以便在安装时运行:

from setuptools import setup                                                        

from setuptools.command.install import install                                      

class CustomInstall(install):                                                       
    def run(self):                                                                  
        install.run(self)                                                           
        print "TEST"                                                           

setup(                                                                              
      ...                                      
      cmdclass={'install': CustomInstall},
      ...) 

我认为问题可能会抑制stdout:Custom pip install commands not running。但后来我用print "TEST"替换了创建文件并编写了一些文本,这也没有发生。

看来我的自定义运行方法只在我创建并上传my_package以测试PyPI时才会发生:

python setup.py sdist bdist_wheel upload -r https://testpypi.python.org/pypi

而不是当我pip安装它时:

pip install -i https://testpypi.python.org/pypi my_package

也许我从根本上不了解pip和setuptools是如何工作的,但这与我预期的行为相反。

我的问题是:

  1. 如何让我的CustomInstall类工作?
    1. 致电pip install时会发生什么?
    2. 我查看了setuptools文档和PyPI文档,但我还没有弄明白。似乎其他人已经取得了成功:Run custom task when call `pip install`,所以我不确定出了什么问题。

2 个答案:

答案 0 :(得分:0)

  

pip是一个用于从Python包安装Python包的工具   索引。

当我遇到同样的问题时,我会提到这个:

https://blog.niteoweb.com/setuptools-run-custom-code-in-setup-py/

答案 1 :(得分:0)

所以我不确定这有多大帮助,但是我最近处理了一个类似的问题,这就是我学到的东西。

  1. 您的自定义安装代码似乎正确。但是,除了run之外,还有更多可以覆盖的方法。另一个有用的方法是finalize_options,因为您可以编写代码来动态更改setup.py的参数(例如here。)

  2. 这是一个非常好的问题。pip install会根据各种因素来做各种事情。您从哪里安装软件包?来自PyPI还是其他软件包索引?包裹如何分发?它是二进制dist(.whl)还是源dist(.gz)文件?您要通过本地目录安装软件包吗?通过VCS URL进行远程回购?在每种情况下,Pip不一定都使用相同的方法。我建议使用-vvv标志来查看点子到底在做什么。无论出于什么原因,它可能都没有运行setuptools的install命令...

     packages=setuptools.find_packages(),
     include_package_data=True
    

在您的setup.py文件中?没有这些行,pip可能会安装软件包的元数据,而不是软件包本身。