2016-11-04 100 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