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 ... p>
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. P>
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? P>
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? P>
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? p>
3 Réponses :
J'ai utilisé une méthode utilitaire appelée data_file: je l'ai mis dans le fichier SeugoTools offre une fonction similaire, mais cela n'a pas besoin de se disissestools. p> p>
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 :)
Vous pouvez essayer pkg_resources code> A>:
my_data = pkg_resources.resource_string(__name__, fname)
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 b> (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é" i>. Donc, si vos fichiers sont installés sur le répertoire de packages XXX; Utilisez XXX au lieu de __ Nom __ code> 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 ...
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. P>