Puis-je contrôler l'architecture (32 bits vs 64 bits) lors de la construction d'un pyinstaller de l'exécutable?

Petite Question

Est-il possible de contrôler et de garantir l'architecture (32 bits vs 64 bits) lors de la construction d'un pyinstaller de l'exécutable?

Fond

J'ai migré de py2exe pour pyinstaller en raison de l'absence de 64 bits avec une foule de petites choses que je vais avoir un moment difficile à la recherche du passé. Donc, sur cette note, je préfère pas revenir à elle. J'ai développé deux applications à l'aide de Python 2.7 64bit et je rencontre des problèmes de performances lors de l'exécution sur 32 bits machines.

Le premier est une simple interface graphique wxPython (version 2.9) et se connecte à un windows fichier DLL pour un pilote USB. Celui-ci semble assez "safe" une course de 32 bits, car il n'y a pas de modules qui sont 64 bits uniquement. Cependant, cette application lors de l'exécution sur 32 bits de Windows XP est horrible problèmes de performances lorsque l'on parle à l'appareil USB.

La deuxième application est beaucoup plus large, et je n'ai pas tenté de construire et d'exécuter pourtant, à cause de la peur de problèmes d'architecture. Cette application a un certain nombre 64 bits uniquement pour les modules (psycopg2 pour un) utilisés en elle. Je voudrais rester à l'écart d'essayer de construire, si elle impossible pour exécuter un exécutable 32 bits.

Pensées Actuelles

Je pense que cela pourrait être possible (si les modules ont 32bit l'appui) par l'exécution de l'build.py avec Python forcé en mode 32 bits. Est-ce vraiment raisonnable?

Mise à jour

J'ai eu plusieurs avancées sur le premier programme que j'était en train de construire. Il s'avère que les problèmes de performance a été basé uniquement sur la vitesse des deux machines. Ma machine de dev avait assez de puissance pour interroger le périphérique USB assez rapide et beaucoup plus lents de plate-forme de test (Windows XP) n'a pas.

J'ai résolu ce problème en modifiant la façon dont j'ai interrogé le port USB. Maintenant que cela a été résolu, j'ai pu lancer l'exe sur les deux systèmes. Un nouveau problème surgit lorsque l'on essaie de construire l'exécutable comme un seul fichier. Lors de l'exécution de pyinstaller de l'Build.py il tire dans tous les DLL de l'application a besoin pour fonctionner. Cela semblait fonctionner à merveille au début, mais quand j'ai essayé d'exécuter l'exe unique que j'ai construit sur Windows 7 64 bits, il n'aurait pas exécuté sur Windows XP, car le dongle USB de la DLL n'a pas été reconnu comme valide DLL.

Afin d'obtenir le seul exe pour lancer sur les deux systèmes, j'ai d'abord essayé de supprimer la DLL à partir de l' .le fichier spec (qui semble être un script python). C'était pratique parce que j'ai été en mesure de modifier la liste des comprend avant la commande de construction de l'ordinaire python liste des modificateurs. Mon espoir était que si la DLL n'a pas été trouvé dans le fichier exe du répertoire temp il allait le trouver sur le CHEMIN d'accès système. Bien que cette approche pourrait travail, je ne pouvais pas le faire fonctionner sans jeter beaucoup d'erreurs.

Ma deuxième tentative a été de construire l'application sur l'ordinateur Windows XP (à partir du DLL embedded) dans l'espoir que le Win XP DLL serait de travailler dans Windows 7. Succès! Cette configuration fonctionne bien, mais je crois sincèrement que ce n'est pas la meilleure solution car elle repose uniquement sur l'ancienne DLL en cours d'exécution sur un nouvel OS.

  • Je sais que vous avez une solution de travail, mais avez-vous essayez d'installer la version 32 bits de Python sur le Win7 ordinateur et de l'utiliser que pour courir build.py? Vous devez installer tous les 32-bits dépendances, mais qui devrait attirer la bonne Dll 32 bits. (D'un autre côté, il peut ne pas fonctionner si vous avez besoin de support XP).
  • La seule DLL qu'il semblait à saisir que je ne voulais pas qu'elle était la DLL pour le dongle USB. Ce logiciel de l'appareil est de 32 bits seulement, je suis donc aller sur une branche et en supposant que le pilote a été 32bit ainsi. Donc dans ce cas je pense que c'était un 7 vs XP pilote de problème d'incompatibilité.
InformationsquelleAutor Adam Lewis | 2011-08-23