Python Packaging: Les fichiers de données sont placés correctement dans le fichier tar.gz mais ne sont pas installés dans l'environnement virtuel
Je ne peux pas installer correctement le projet package_fiddler
à mon environnement virtuel.
J'ai compris que MANIFEST.in
est responsable de la mise non-.py fichiers dans Package_fiddler-0.0.0.tar.gz
qui est généré lors de l'exécution de python setup.py sdist
.
Puis j'ai fait:
(virt_envir)$ pip install dist/Package_fiddler-0.0.0.tar.gz
Mais cela n'a pas installer les fichiers de données, ni le paquet de /home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
J'ai essayé plusieurs configurations de l'installation des arguments package_data
include_package_data
et data_files
mais il me semble avoir utilisé la mauvaise configuration à chaque fois.
La configuration de package_data
et/ou include_package_data
et/ou data_files
va installer correctement package_fiddler
à mon environnement virtuel?
Arborescence du projet
.
├── MANIFEST.in
├── package_fiddler
│ ├── data
│ │ ├── example.html
│ │ └── stylesheets
│ │ └── example.css
│ └── __init__.py
├── README.rst
└── setup.py
setup.py
from setuptools import setup
setup(
name='Package_fiddler',
entry_points={
'console_scripts': ['package_fiddler = package_fiddler:main', ],},
long_description=open('README.rst').read(),
packages=['package_fiddler',])
MANIFESTE.dans
include README.rst
recursive-include package_fiddler/data *
Les configurations de setup.py(avec le code de base ci-dessus) ai-je essayé?
Configuration1
Ajoutant:
package_data={"": ['package_fiddler/data/*',]}
Configuration2
Ajoutant:
package_data={"": ['*.html', '*.css', '*.rst']}
Configuration3
Ajoutant:
include_package_data=True
Configuration4
Ajoutant:
package_data={"": ['package_fiddler/data',]}
Retrait:
packages=['package_fiddler',]
Configuration5 (la suggestion de Chris)
Ajoutant:
package_data={"data": ['package_fiddler/data',]}
Retrait:
packages=['package_fiddler',]
Configuration 6
Ajoutant:
package_data={"": ['package_fiddler/data/*',]}
Retrait:
packages=['package_fiddler',]
Ces configurations de tous les résultats dans aucun des fichiers en cours d'installation sur /home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
MODIFIER
Note de Toshio Kuratomi:
Dans mon premier post, j'ai utilisé le plus simple de la structure de l'arbre d'où ce problème se produit, pour plus de clarté, mais en réalité mon arbre qui ressemble plus à de l'arbre ci-dessous. Pour l'arbre, étrangement si j'ai seulement mis __init__.py
dans stylesheets
en quelque sorte tous les fichiers de données dans le texts
dossier sont également installés correctement!!! Cela me déroute.
Arbre 2 (il installe tous les fichiers de données correctement en quelque sorte!!)
.
├── MANIFEST.in
├── package_fiddler
│ │── stylesheets
| | ├── __init__.py
| | ├── example.css
| | └── other
| | └── example2.css
| |__ texts
| | ├── example.txt
| | └── other
| | └── example2.txt
│ └── __init__.py
├── README.rst
└── setup.py
source d'informationauteur Bentley4
Vous devez vous connecter pour publier un commentaire.
Personnellement, je n'aime pas la façon setuptools mélanges de code et de données à la fois sur le plan conceptuel et la mise en œuvre d'une montre. Je pense que c'est que la mise en œuvre qui est le déclenchement de vous ici. Pour setuptools à trouver et à utiliser package_data il a besoin pour que les données se trouvent à l'intérieur d'un paquet python. Un paquet python peut être un répertoire, mais il doit y avoir un
__init__.py
fichier dans le répertoire. Donc, on dirait que vous avez besoin de la suite (vide est très bien) des fichiers:Trouvé une solution qui a fonctionné pour moi ici.
À l'aide de
setuptools==2.0.2
j'ai fait:La manière la plus simple d'inclure les données du paquet "setup.py" c'est comme si:
Donc dans votre exemple:
package_data
est un dictionnaire dont les clés sont les noms des paquets inclus dans le programme d'installation. Les valeurs de ces clés doivent être des listes de fichiers spécifiques des chemins ou des globules/des caractères génériques dans le répertoire du package.Vous devez également inclure le drapeau:
dans
setup(...)
si vous voulez être en mesure de résoudre de système de fichiers chemins d'accès à vos données. Sinon, vous pouvez utiliserpkg_resources
pour ce faire: http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resourcesVous avez certainement n'avez pas besoin d'une
__init__.py
fichier dans le répertoire "data" - ce répertoire n'est pas un module et n'est pas destiné à être importé.Cela fonctionne pour moi. Espérons que cela aide.
utilisation
au lieu de