2017-05-22 25 views
8

Paketimi, kurulum işleminde bir betik yürütecek şekilde yapılandırmaya çalıştım. Bu nedenle, setuptools.command öğesinden miras aldım ve paket yüklendiğinde işleri yapmak için özel sınıfım ActionOnInstall'u oluşturdum. Bu sınıf, here sayılı belgede açıklandığı gibi setup() argüman cmdclass numaralı kurulum aracılığıyla çağrılır.cm3class argümanı ile ilgili pip3 ve `python3 setup.py install` arasındaki fark

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}) 

başarıyla

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

çalışır yürüterek paketi Bina ama ActionOnInstall.run() belirtilen komutları yürütmüyor gibi

böyle bir setup.py dosyasının minimum örnek görünüyor. Daha doğrudan doğruya ActionOnInstall.run() belirtilen komutlar

python3 setup.py install 

bu setup.py yürütür çağrı. Daha sonra, kendimi şu soruyu sordum: Bu iki paketin bir paket kurmak için kullandığı yaklaşımın gerçek farkı nedir? Biliyorum, diğer yayınların bize söylediği gibi, pip kurulumuyla ilgili hayatı kolaylaştırıyor. Ama bu her iki yaklaşımın cmdclass argümanını nasıl tedavi ettiği açıklanmamıştır. Böylece sizden haber almayı çok isterim.

cevap

8

pip, setup.py'yi çağırır ancak stdout/stderr'i yeniden yönlendirir. Sabit bir yerde bir dosyaya pip yazma altında setup.py test etmek için: paketinizi kurarken /tmp/debug.log içine

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

Look pip install .

3

pip sonra python setup.py install çalışıyor mu - bu değişmezse setup.py uygulamasının gerçekleştirilme şekli.

Herhangi bir çıktı görmemenizin sebebi, @phd'nin belirttiği gibi,çalıştırılırken yazdırılan bilgilerin çoğunun çoğu kullanıcı için yararlı olmadığından, varsayılan olarak setup.py dosyasının çalışmasını engeller.

Beni anlayan, pip install için "--verbose" seçeneğini geçirerek her şey pip ile birlikte bu gizli çıkış görebilirsiniz:

$ 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...