2017-05-22 11 views
8

インストールプロセスでスクリプトが実行されるようにパッケージを設定しようとしました。したがって、私はsetuptools.commandから継承し、カスタムクラスActionOnInstallを作成して、パッケージがインストールされたときに処理を行います。このクラスは、hereのように、setuptools setup()引数cmdclassによって呼び出されます。cmdclass引数に関してpip3と `python3 setup.py install`の違い

なsetup.pyファイルの最小限の例が正常に実行されますがActionOnInstall.run()で指定されたコマンドを実行しません

pip3 install <path-to-dir-with-setup.py> 

を実行することにより、パッケージの構築

from setuptools import find_packages, setup 
from setuptools.command.install import install 


class ActionOnInstall(install): 
    def run(self): 
     print("Call install.run(self) works!") 
     install.run(self) 


setup(name='name', 
     cmdclass={ 
     'install': ActionOnInstall}) 

のように見えます。より直接的にこのsetup.pyを

python3 setup.py install 

ActionOnInstall.run()で指定されたコマンドを実行して呼び出します。

次に、パッケージをインストールするためのこれら2つのアプローチの実際の違いは何かを尋ねました。他の投稿からも分かるように、pipはパッケージのインストールを簡単にします。しかし、これらの両方のアプローチがsetup()cmdclass引数を異なる方法で扱う方法については説明しません。したがって、皆さんからのご意見をお待ちしております。

答えて

8

pipはsetup.pyを呼び出しますが、stdout/stderrをリダイレクトします。それは変更されません - あなたのパッケージをインストールする際にpip install .

3

ピップがpython setup.py installを実行しない後/tmp/debug.logに

class ActionOnInstall(install): 
    def run(self): 
     print("Call install.run(self) works!", file=open('/tmp/debug.log', 'w')) 
     install.run(self) 

はルック:固定された場所にあるファイルにピップ書き込みの下でsetup.pyテストするにはあなたのsetup.pyがどのように実行されるかを示します。

python setup.py installを実行したときに印刷される情報の大部分がほとんどのユーザーにとって役に立たないため、出力が表示されない理由は、既定ではsetup.pyファイルを実行しているすべての出力を非表示にします。

あなたはありません、pip installに「--verbose」オプションを渡すことによって、他のすべてピップと一緒に、この隠された出力を見ることができます:

$ pip install --verbose ./foo 
Processing ./foo 
Running setup.py (path:/private/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-ti0o0gtu-build/setup.py) egg_info for package from file:///Users/pradyunsg/.venvwrap/venvs/t 
mp-c0ebb35987c76ad/foo 
    Running command python setup.py egg_info 
    running egg_info 
    creating pip-egg-info/foo.egg-info 
    writing pip-egg-info/foo.egg-info/PKG-INFO 
    writing dependency_links to pip-egg-info/foo.egg-info/dependency_links.txt 
    writing top-level names to pip-egg-info/foo.egg-info/top_level.txt 
    writing manifest file 'pip-egg-info/foo.egg-info/SOURCES.txt' 
    reading manifest file 'pip-egg-info/foo.egg-info/SOURCES.txt' 
    writing manifest file 'pip-egg-info/foo.egg-info/SOURCES.txt' 
Source in /private/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-ti0o0gtu-build has version 0.0.0, which satisfies requirement foo==0.0.0 from file:///Users/pradyunsg/.ve 
nvwrap/venvs/tmp-c0ebb35987c76ad/foo 
Could not parse version from link: file:///Users/pradyunsg/.venvwrap/venvs/tmp-c0ebb35987c76ad/foo 
Installing collected packages: foo 
Running setup.py install for foo ...  Running command /Users/pradyunsg/.venvwrap/venvs/tmp-c0ebb35987c76ad/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/privat 
e/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-ti0o0gtu-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(comp 
ile(code, __file__, 'exec'))" install --record /var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-cetn8xa9-record/install-record.txt --single-version-externally-managed --compi 
le --install-headers /Users/pradyunsg/.venvwrap/venvs/tmp-c0ebb35987c76ad/bin/../include/site/python3.6/foo 
    running install 
    Call install.run(self) works! 
    running build 
    running install_egg_info 
    running egg_info 
    creating foo.egg-info 
    writing foo.egg-info/PKG-INFO 
    writing dependency_links to foo.egg-info/dependency_links.txt 
    writing top-level names to foo.egg-info/top_level.txt 
    writing manifest file 'foo.egg-info/SOURCES.txt' 
    reading manifest file 'foo.egg-info/SOURCES.txt' 
    writing manifest file 'foo.egg-info/SOURCES.txt' 
    Copying foo.egg-info to /Users/pradyunsg/.venvwrap/venvs/tmp-c0ebb35987c76ad/lib/python3.6/site-packages/foo-0.0.0-py3.6.egg-info 
    running install_scripts 
    writing list of installed files to '/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-cetn8xa9-record/install-record.txt' 
done 
Removing source in /private/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-ti0o0gtu-build 
Successfully installed foo-0.0.0 
Cleaning up... 
関連する問題