J'écris une application Django qui utilise pip & virtualenv pour gérer son environnement de développement. L'une des dépendances, pkgme, contient de nombreux fichiers de données qui constituent ses «backends» et sont configurés dans son fichier setup.py avec data_files=$FOO
(plutôt que package_data
).Comment distribuer/accéder aux fichiers de données dans Oeuf Python?
Lorsque pkgme cherche ses backends, il regarde os.path.join(sys.prefix, "share", "pkgme", "backends")
. Cela fonctionne très bien quand pkgme a été installé normalement, et semble correspondre à documentation mais fonctionne pas lorsque pkgme est installé comme un oeuf.
Là, les fichiers de données sont installés sous $VIRTUAL_ENV/lib/python2.7/site-packages/pkgme-0.1-py2.7.egg/share
plutôt que le $VIRTUAL_ENV/share
attendu.
Ce qui me laisse avec deux questions:
- devrais-je utiliser autre chose que ci-dessus
os.path.join
pour trouver les fichiers de données indépendamment du fait que nous utilisons une installation d'oeuf ou une installation de système traditionnel? Si oui, quoi? - Dois-je distribuer différemment mes fichiers de données afin de les rendre plus facilement disponibles dans un œuf?
Notez que je connais environ pkgutil.get_data
, mais je préfère ne pas l'utiliser. Je ne suis pas intéressé par le contenu de ces fichiers de données, je veux connaître leur emplacement à la place, afin que je puisse les exécuter.
Mon plan actuel est de le faire:
- Utilisation
package_data
au lieu dedata_files
- changement pkgme à rechercher backends par rapport à
pkgme.__file__
plutôt quesys.prefix
Merci PJE. Bon à savoir à propos du contrôle "__file__". Je suis allé avec une approche similaire à celle que j'ai suggéré dans la question, mais avec l'utilisation supplémentaire de points d'entrée pour gérer certains backends. – jml