find_packages python setuptools distribute

python - setuptools find_packages



¿Cómo incluir los datos del paquete con setuptools/distribute? (7)

Acabo de tener este mismo problema. La solución fue simplemente eliminar include_package_data=True .

Después de leer aquí , me di cuenta de que include_package_data apunta a incluir archivos desde el control de versiones , en lugar de simplemente "incluir datos del paquete" como su nombre lo indica. De los documentos:

Los archivos de datos [de include_package_data] deben estar bajo control CVS o Subversion

...

Si desea un control más detallado sobre qué archivos están incluidos (por ejemplo, si tiene archivos de documentación en sus directorios de paquetes y desea excluirlos de la instalación), también puede usar la palabra clave package_data .

Sacar esa discusión lo arregló, que es coincidentemente por qué también funcionó cuando cambiaste a distutils, ya que no toma ese argumento.

Al usar setuptools / distribute, no puedo hacer que el instalador extraiga ningún archivo package_data . Todo lo que he leído dice que la siguiente es la forma correcta de hacerlo. ¿Puede alguien por favor asesorar?

setup( name=''myapp'', packages=find_packages(), package_data={ ''myapp'': [''data/*.txt''], }, include_package_data=True, zip_safe=False, install_requires=[''distribute''], )

donde myapp/data/ es la ubicación de los archivos de datos.


Me doy cuenta de que esta es una vieja pregunta ... pero para las personas que encuentran la manera de llegar aquí a través de Google: package_data es una mentira sucia y desagradable . Solo se usa al python setup.py bdist ... paquetes binarios ( python setup.py bdist ... ) pero no al python setup.py sdist ... paquetes fuente ( python setup.py sdist ... ). Esto es, por supuesto, ridículo: uno esperaría que la creación de una distribución de origen daría como resultado una colección de archivos que podrían enviarse a otra persona para construir la distribución binaria.

En cualquier caso, usar MANIFEST.in funcionará tanto para distribuciones binarias como para fuente.



Pregunta antigua y, sin embargo ... la administración de paquetes de pitón realmente deja mucho que desear. Así que tuve el caso práctico de instalar utilizando pip localmente en un directorio específico y me sorprendió que las rutas package_data y data_files no funcionasen. No estaba interesado en agregar otro archivo al repositorio, así que terminé aprovechando data_files y la opción setup.py --install-data; algo como esto

pip install . --install-option="--install-data=$PWD/package" -t package


Seguir la recomendación de @Joe para eliminar la línea include_package_data=True también me ha funcionado.

Para elaborar un poco más, no tengo ningún archivo MANIFEST.in . Yo uso Git y no CVS.

El repositorio toma este tipo de forma:

/myrepo - .git/ - setup.py - myproject - __init__.py - some_mod - __init__.py - animals.py - rocks.py - config - __init__.py - settings.py - other_settings.special - cool.huh - other_settings.xml - words - __init__.py word_set.txt

setup.py :

from setuptools import setup, find_packages import os.path setup ( name=''myproject'', version = "4.19", packages = find_packages(), # package_dir={''mypkg'': ''src/mypkg''}, # didnt use this. package_data = { # If any package contains *.txt or *.rst files, include them: '''': [''*.txt'', ''*.xml'', ''*.special'', ''*.huh''], }, # # Oddly enough, include_package_data=True prevented package_data from working. # include_package_data=True, # Commented out. data_files=[ # (''bitmaps'', [''bm/b1.gif'', ''bm/b2.gif'']), (''/opt/local/myproject/etc'', [''myproject/config/settings.py'', ''myproject/config/other_settings.special'']), (''/opt/local/myproject/etc'', [os.path.join(''myproject/config'', ''cool.huh'')]), # (''/opt/local/myproject/etc'', [os.path.join(''myproject/config'', ''other_settings.xml'')]), (''/opt/local/myproject/data'', [os.path.join(''myproject/words'', ''word_set.txt'')]), ], install_requires=[ ''jsonschema'', ''logging'', ], entry_points = { ''console_scripts'': [ # Blah... ], }, )

python setup.py sdist para una fuente distrib (no he probado el binario).

Y cuando estoy dentro de un nuevo entorno virtual, tengo un myproject-4.19.tar.gz , y uso

(venv) pip install ~/myproject-4.19.tar.gz ...

Y aparte de que todo se instala en los site-packages de site-packages mi entorno virtual, esos archivos de datos especiales se instalan en /opt/local/myproject/data y /opt/local/myproject/etc


include_package_data=True funcionó para mí.

Si usa git, recuerde incluir setuptools-git en install_requires . Mucho menos aburrido que tener un Manifest o incluir todo el camino en package_data (en mi caso es una aplicación django con todo tipo de estática)

(pegado el comentario que hice, como k3-rnc mencionó es realmente útil como es)


Actualización : esta respuesta es antigua y la información ya no es válida. Todas las configuraciones de setup.py deben usar import setuptools . He agregado una respuesta más completa en https://.com/a/49501350/64313

Lo resolví cambiando a distutils. Parece que la distribución está obsoleta y / o rota.

from distutils.core import setup setup( name=''myapp'', packages=[''myapp''], package_data={ ''myapp'': [''data/*.txt''], }, )