2016-11-04 58 views
1

我有一个Python包,我用pip发布。我需要添加一些自定义代码在安装时要运行:使用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}, 
     ...) 

我想这个问题可能点子抑制标准输出:Custom pip install commands not running。但后来我将print "TEST"替换为创建文件并写入一些文本,但这也没有发生。

看来,当我创建并上传my_package测试的PyPI我自定义的run方法只发生:

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

而不是当我点子安装:

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

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

我的问题是:

  1. 我怎样才能让我的CustomInstall类工作?

  • 当你调用pip install居然会发生什么?
  • 我看过一个setuptools文档和PyPI文档,我一直没弄明白。看起来其他人已经取得了成功:Run custom task when call `pip install`,所以我不确定发生了什么问题。

    回答

    0

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

    当我encounterd同样的问题,我指的是:

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

    +1

    是的,这是我用以及资源。我的困惑是,当我运行'python setup.py'时,自定义逻辑运行,但当我点击安装我的项目时运行。我认为run()方法会在'pip install my_project'上被调用。情况并非如此吗?如果是这样,是否有一种不同的方法,我可以在'pip install my_project'上运行子类? –

    +2

    为了回答你的问题,因为我打了它:你需要发布你的软件包作为源代码分发(sdist)而不是轮子(bdist_wheel),因为在安装过程中setup.py不会被执行为轮子 – ChristopheLec