2012-03-07 11 views
27

In una crociata per rendere la mia applicazione pip -installable, sto combattendo grandi lotte con setuptools e distribute. Presumo che le mie dipendenze siano corrette, vale a dire l'installazione con pip install myapp dovrebbe probabilmente riempire correttamente l'ambiente virtuale. Tuttavia, mi piacerebbe ottimizzare lo sviluppo mentre ci sono, quindi il mio obiettivo è iniziare con uno virtualenv vuoto e fare setup.py test (e più tardi setup.py develop, ma è una lotta completamente diversa) riempirlo con tutte le dipendenze definite.Come impongo `setup.py test` per installare le dipendenze nel mio` virtualenv`?

E ora al mio problema: non importa quanto ci provi, tutto ciò che ottengo sono le dipendenze installate come .egg nella mia directory di progetto che è per lo meno sub-ottimale. Ho provato a creare un nuovo comando setuptools che userebbe pip (che sembra funzionare, anche se in modo imbarazzante) ma che non può essere seriamente la soluzione (sottoclasse e sovrascrittura che è).

Così come faccio a fare setup.py test riempire il virtualevn invece della mia directory di lavoro?

+0

È possibile aggiungere l'output del comando 'python setup.py develop' alla domanda? Quando lo eseguo all'interno di un virtualenv, installa dipendenze al mio virtualenv. – Chris

+0

@Chris: non dipendenze 'tests_requires'. – Flimm

risposta

11

In base alla progettazione, non è possibile eseguire le voci tests_requires o setup_requires nell'ambiente virtuale. L'idea è di separare ciò che è necessario per eseguire test/setup e cosa è necessario per utilizzare effettivamente il pacchetto che si sta installando. Ad esempio, potrei richiedere che il modulo "copertura" sia necessario per eseguire test sul mio pacchetto, ma non è utilizzato da nessuno dei miei codici nel pacchetto. Pertanto, se non ho avuto "copertura" nel mio ambiente quando vado a eseguire test, non vorrei che la "copertura" venga installata nell'ambiente se il mio pacchetto non ne ha bisogno.

+2

Qual è lo scopo dei test_question? –

+2

In alcuni casi, i test potrebbero avere una dipendenza aggiuntiva che il pacchetto non ha per poter eseguire i test. Un esempio particolare è il pacchetto "nose", che potrebbe non essere mai utilizzato da nessun'altra parte nel tuo progetto ma dai test. Ciò consente di spedire solo il pacchetto senza test e di non gravare sugli utenti di dipendenze non necessarie per far funzionare il pacchetto. –

+4

Intendevo lo scopo di test_requires se è sempre e solo ignorato ... Ho perso completamente che non è ignorato quando si esegue 'setup.py tests'/il comportamento di venv sembra sorprendente, capisco che non dovrebbe essere predefinito ma dovresti essere in grado di forzare pip all'installazione di test_requires ... http: // stackoverflow.it/a/15422703/1240268 –

-5

Se si utilizza setuptools, è possibile specificare le dipendenze di test utilizzando l'argomento parola chiave tests_require per il metodo setup.

from setuptools import setup 

setup(
    name='your-package-name', 
    version='1.0.0', 
    author='me', 
    author_email='[email protected]', 
    install_requires=['Pygments>=1.4'], 
    tests_require=['nose'], 
    packages=[ 
     'your_package_name', 
    ], 
) 

Quando si esegue python setup.py test, questo controlla la presenza di nose e installarlo al momento attivo virtualenv utilizzando pip se non già disponibili.

Si noti che questo argomento verrà ignorato se si utilizza distribute.core.setup (né sarà disponibile il comando test).

+0

Non usa pip nella mia esperienza. – Flimm

+0

Questo è esattamente ciò che l'OP ha fatto - finendo con .egg dirs dappertutto – UloPe

+5

Questa risposta è esplicitamente errata. La [doc] (http://pythonhosted.org/setuptools/setuptools.html#new-and-changed-setup-keywords) afferma che setuptools userà EasyInstall per installare i pacchetti 'tests_require' in" directory di installazione del progetto ", qualunque cosa ciò possa significare. – bukzor

Problemi correlati