2012-07-19 12 views
18

He creado un ambiente y añadí un paquete django-paramField a través de git:Pip congelación no muestra las rutas de repositorios para los requisitos de archivo

$ pip install git+https://bitbucket.org/DataGreed/django-paramfield.git 
Downloading/unpacking git+https://bitbucket.org/DataGreed/django-paramfield.git 
    Cloning https://bitbucket.org/DataGreed/django-paramfield.git to /var/folders/9Z/9ZQZ1Q3WGMOW+JguzcBKNU+++TI/-Tmp-/pip-49Eokm-build 
Unpacking objects: 100% (29/29), done. 
    Running setup.py egg_info for package from git+https://bitbucket.org/DataGreed/django-paramfield.git 
Installing collected packages: paramfield 
    Running setup.py install for paramfield 
Successfully installed paramfield 
Cleaning up... 

Pero cuando quiero crear un archivo de requisitos, sólo la veo nombre del paquete:

$ pip freeze 
paramfield==0.1 
wsgiref==0.1.2 

¿Cómo puedo hacer que muestre toda la cadena de git+https://bitbucket.org/DataGreed/django-paramfield.git en lugar de sólo un nombre de paquete? El paquete no está en PyPi.

UPD: tal vez, tiene que hacer algo con setup.py? ¿Debo cambiarlo de alguna manera para reflejar el repo url?

UPD2: He encontrado bastante similares question en stackoverflow, pero el autor no estaba seguro de cómo se las arregló para resolver un problema y la respuesta aceptada no da una buena pista por desgracia, aunque a juzgar por el comentario del autor tiene algo que ver con el archivo setup.py.

UPD3: He intentado pasar download_url en setup.py e instalando el paquete a través de pip con esta url, pero el problema persiste.

+0

sonidos como si esto es un error en la pipa o una omisión en su documentación. Diles https://github.com/pypa/pip/issues –

+0

gracias, he presentado un problema - https://github.com/pypa/pip/issues/609 – DataGreed

Respuesta

17

Una solución sencilla pero de trabajo sería la de instalar el paquete con la bandera -e como pip install -e git+https://bitbucket.org/DataGreed/django-paramfield.git#egg=django-paramfield.

Luego, pip freeze muestra la ruta de origen completa del paquete. No es la mejor manera de solucionarlo en pip, pero está funcionando. La compensación de -e (indicador de edición) es que pip clona el repositorio git/hg en /path/to/venv/src/packagename y ejecuta python setup.py deploy en lugar de clonarlo en un directorio de temperatura y ejecutar python setup.py install y eliminar el directorio de temperatura después de la configuración del paquete.

+0

Gracias, que realmente es una posible solución, pero creo que la sintaxis correcta para esto es instalar pip -e git + https: //bitbucket.org/DataGreed /django-paramfield.git#egg=paramfield - pero, ¿qué hace exactamente la bandera -e? Especifique un directorio para instalar el paquete? – DataGreed

3

Aquí hay un script que va a hacer eso:

#!/usr/bin/env python 

from subprocess import check_output 
from pkg_resources import get_distribution 

def download_url(package): 
    dist = get_distribution(package) 
    for line in dist._get_metadata('PKG-INFO'): 
     if line.startswith('Download-URL:'): 
      return line.split(':', 1)[1] 


def main(argv=None): 
    import sys 
    from argparse import ArgumentParser 

    argv = argv or sys.argv 

    parser = ArgumentParser(
     description='show download urls for installed packages') 
    parser.parse_args(argv[1:]) 

    for package in check_output(['pip', 'freeze']).splitlines(): 
     print('{}: {}'.format(package, download_url(package) or 'UNKNOWN')) 


if __name__ == '__main__': 
    main() 
+0

pero ¿por qué el congelamiento de pip no hace eso? Por lo general, muestra repo urls – DataGreed

+0

debería haber una manera más fácil de hacerlo claramente – DataGreed

1

Ésta es una vieja pregunta, pero sólo he trabajado a través de este mismo tema y la resolución Simplemente añadir la ruta al repositorio (GIT en mi caso) a los requisitos de la FIE en lugar del nombre del paquete

es decir

... 
celery==3.0.19 
# chunkdata isn't available on PyPi 
https://github.com/aaronmccall/chunkdata/zipball/master 
distribute==0.6.34 
... 

funcionó como un encanto deplying en heroku

+0

seguro, es básicamente lo mismo que la respuesta aceptada: el congelamiento de pip generará una línea similar;) – DataGreed

+0

o 'git + https: // github.com/aaronmccall/chunkdata.git' – Rockallite

Cuestiones relacionadas