2015-02-13 12 views
17

TL; DR: Gibt es eine Möglichkeit, setuptool "zu entwickeln", um eine Reihe von Entwicklungsanforderungen zu installieren, wenn python setup.py develop ausgeführt wird?Setuptools "Entwicklung" Anforderungen

Ich baue mein erstes Python-Paket mit setuptools. Ich bin unter Angabe der Anforderungen:

requirements = [ 
    'click', 
    'ansible', 
    'fabric', 
    'gitpython', 
    'pyyaml', 
    'jinja2', 
    'yapsy' 
] 

test_requirements = [ 
    'pytest', 
    'pytest-pep8', 
    'pytest-cov', 
] 

setup(
... 
    install_requires=requirements, 
    tests_require=test_requirements, 
... 
) 

Während der Entwicklung, ich habe das Paket gewesen Installation (in einer virtuellen Umgebung) mit:

python setup.py develop 

und Deinstallation mit:

python setup.py develop -u 

Das Paket verwendet entry_points, um einige Befehlszeilenskripts zu installieren. Dadurch werden die Befehle für mich eingerichtet und ich kann das Paket bearbeiten, während ich gleichzeitig den Befehl teste.

Ich habe auch einige Abhängigkeiten, die ich für die Entwicklung verwenden ... Sphinx + Erweiterungen und ein paar andere Dinge (Dinge, die nicht benötigt werden, um das Paket zu verwenden). Ich installiere sie gerade manuell in der virtuellen Umgebung. Ich habe keine Dokumentation (und habe keine Beispiele in den Google-Dateien gefunden) darüber gefunden, wie man sie mit Setup-Tools verbinden kann.

Vielleicht gibt es eine Möglichkeit, 'setup.py develop' zu installieren, um zusätzliche Anforderungen zu installieren? Eine andere Methode, von der ich nichts gelesen habe?

+1

Für Entwicklungszwecke würde ich empfehlen, eine 'requirements.txt' zu verwenden, um Paketversionen für eine Entwicklungsumgebung zu pinten, und dann' pip install -r requirements.txt' auszuführen, um diese Umgebung bereitzustellen. Das ist die Art von Anwendungsfall, für den es da ist. – Iguananaut

Antwort

26

Für weitere Informationen über die Verwendung setup.py vs requirements.txt, fand ich this article hilfreich.

Update: September 2016

ich nicht mehr verwenden requirements.txt für die Installation Entwicklung nur Pakete (Original Antwort siehe unten). Die vorherrschende Meinung scheint zu sein, dass requirements.txt verwendet werden sollte, um Bereitstellungen an bestimmten Versionsnummern zu pinten, typischerweise unter Verwendung von pip freeze > requirements.txt. Dies stellt sicher, dass genau die gleichen Versionen der Abhängigkeiten Ihres Projekts und auch die Abhängigkeiten der Abhängigkeiten eines Projekts auf allen Ihren Servern installiert sind.

Ich verwende stattdessen die extras_require Option zu setup.

requirements = [ 
    'click', 
    'ansible', 
    'fabric', 
    'gitpython', 
    'pyyaml', 
    'jinja2', 
    'yapsy' 
] 

setup({ 
    install_requires=requirements, 
    extras_require={ 
     'dev': [ 
      'pytest', 
      'pytest-pep8', 
      'pytest-cov' 
     ] 
    } 
}) 

jetzt Ihr Paket für die Entwicklung zu installieren, führen Sie pip install -e .[dev]. Dadurch werden alle regelmäßig erforderlichen Pakete und installiert, die im Abschnitt dev von extras_require aufgeführt sind.

Produktionsinstallationen können weiterhin mit python setup.py install oder pip install . (oder mit einer requirements.txt Datei) durchgeführt werden.

Original-Antwort

Hier ist ein Weg, es zu tun, die im Einklang mit den Empfehlungen zu sein scheint, ich habe laufen in setup.py vs requirements.txt über. Geben Sie alle Ihre Produktionsabhängigkeiten im Parameter von setup.py an.

requirements = [ 
    'click', 
    'ansible', 
    'fabric', 
    'gitpython', 
    'pyyaml', 
    'jinja2', 
    'yapsy' 
] 

setup({ 
    # ... 
    install_requires=requirements 
    # ... 
}) 

Dann eine requirements.txt-Datei erstellen, die Ihre Produktions Abhängigkeiten von setup.py sowie Ihre Test Abhängigkeiten installieren pip anweist.

-e . 

pytest 
pytest-pep8 
pytest-cov 

Jetzt können Sie Ihr Paket für die Entwicklung mit pip install -r requirements.txt installieren. Die Zeile -e . installiert Ihr Paket und seine Abhängigkeiten von setup.py im Entwicklungsmodus. Zur Installation in der Produktion können Sie python setup.py install oder pip install . verwenden. Dadurch werden nur die in setup.py aufgelisteten Abhängigkeiten installiert.

+3

Dies würde jedoch wahrscheinlich Heroku-ähnliche Bereitstellungen durcheinanderbringen, da sie 'requirements.txt' für die Produktionsanforderungen verwenden. – Ale