11
votes

Accéder à des fichiers de données avant et après les distunes / sechools

Je fais une plate-forme application PyQt indépendante. J'ai l'intention d'utiliser écrire un fichier setup.py en utilisant setuptools. Jusqu'à présent, je suis parvenu à la plate-forme Detech, par exemple charger des options spécifiques pour la configuration () en fonction de la plate-forme afin d'utiliser py2exe sous Windows ... etc ...

Cependant, avec ma demande je distribue des thèmes, HTML et images, je dois charger ces images dans l'application lors de l'exécution. Jusqu'à présent, ils sont stockés dans les thèmes / répertoire de l'application.

J'ai lu la documentation sur setuptools et distutils, et compris que si je donnais la configuration () les options de data_files avec tous les fichiers dans les thèmes / répertoire à installer dans « action / MyApp / thèmes / » il serait être installé avec un / usr / préfixe, ou quel que soit sys.prefix est sur la plate-forme. Je suppose que je trouverais les fichiers de données à l'aide os.path.join (sys.prefix, « partager », « MyApp », « thèmes ») nomatter quelle plate-forme que je suis, non?

Cependant, je veux être en mesure d'accéder aux fichiers de données au cours du développement aussi, où ils résident dans les thèmes / répertoire par rapport à la source de l'application. Comment puis-je faire cela? Est-il un moyen intelligent pour savoir si l'application a été installée? Ou un utilitaire qui mappe les fichiers de données, peu importe où ils sont, en ce moment?

Je déteste vraiment ajouter toutes sortes de hacks laids pour voir s'il y a des thèmes par rapport à la source, ou sys.prefix / share ... etc ... Comment puis-je trouver là des fichiers de données au cours du développement? et après l'installation sur la plate-forme arbitraire?


0 commentaires

3 Réponses :


5
votes

J'ai utilisé une méthode utilitaire appelée data_file: xxx

je l'ai mis dans le fichier init .PY dans mon projet, puis appelez-le de n'importe où Dans mon colis pour obtenir un fichier relatif au colis.

SeugoTools offre une fonction similaire, mais cela n'a pas besoin de se disissestools.


3 commentaires

Comment cela fonctionnera-t-il lorsque Data_Files est installé dans / USR / Share / AppName / Thèmes / et mon exécutable se trouve dans quelque chose comme / USR / LIB / AppName Je suppose que ... Distutils Documentation dit qu'il sera installé avec le SYS. Préfixe comme préfixe pour le chemin relatif que j'ai donné les fichiers de données à stocker dans ... sur * Nix Systems Data Les fichiers devraient probablement aussi être dans / usr / partager / appName / AppName /


J'ai utilisé cela avec une option Package_Data dans setup.py. Pas sûr des données_files.


Ok ... ouais, package_data est également une option ... peut-être que je devrais y aller avec ça ... je ne pense pas que ça va générer des forfaits compatibles Debian :)



7
votes

3 commentaires

Mes fichiers de données sont d'installer dans la racine XX.EGG, tandis que la chaîne de ressources tente de les obtenir de nom (sorcière est dans 'xxx.egg / package / sous-paquet') afin qu'il échoue toujours.


@Jenstimmerman: Cliquez sur le lien: "L'argument de la ressource_name est interprété par rapport au paquet nommé" . Donc, si vos fichiers sont installés sur le répertoire de packages XXX; Utilisez XXX au lieu de __ Nom __ ou configurez pour installer les fichiers dans le répertoire de sous-package.


Eh bien, ils sont installés à la racine de l'œuf, donc le répertoire de paquets par défaut, mais à l'aide d'une chaîne vide ne fonctionne pas. Il ne semble tout simplement pas que les choses plus faciles soient plus faciles si je dois la configurer pour être installé juste à côté de la source de toute façon ...



6
votes

Vous devriez Utilisez le module PKGUTIL / PKG_RESOURCES pour charger les fichiers de données . Il travaille même de l'intérieur des œufs à glissière.


0 commentaires