Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Porter son code de linux à windows simplement

+10 votes

J'ai développé un programme de calcul scientifique pour un collègue de labo. Moi je suis sur Archlinux, j'ai la dernière version de python 3, pip, enfin toussa toussa. Je sais installer mes libs et gérer les dépendances. Lui, pas du tout, et il n'aura sûrement pas envie de s'embêter. Le code ne sera que pour lui, donc pas besoin de faire un truc standard qui respecte 46 normes. Je veux juste lui donner le programme, sous n'importe quelle forme, qu'il clique, et que ça marche.

Est-ce que vous auriez une idée de comment on fait ça ?

voilà les imports que je fais:

import os
import sys
import matplotlib
matplotlib.use("Qt4Agg")
from PyQt4 import QtGui, QtCore
import numpy as np
from lmfit import Model
from scipy import stats
from scipy.special import erf
from scipy import constants

# Personal modules
from log import MyLog
from canvas import MyGraph
from spin import PersoSpin

sys.path.append('/home/rififi/informatique/python/batbelt')
from easyxls import EasyXls
demandé 22-Jan-2015 par Rififi (508 points)

4 Réponses

+6 votes
 
Meilleure réponse

Si tu utilises QT4 et que tu ne peux pas lui demander d'installer la lib, alors il te faut faire un exe.

Py2exe permet de le faire, même si ça demande un peu de tweak pour inclure QT.

répondu 22-Jan-2015 par Sam (4,980 points)
sélectionné 23-Jan-2015 par Rififi

Ok je vais voir. Ça n'a pas l'air simple pourtant. Qu'en est-il des autres libs, genre scipy, numpy, matplotlib ? Ça se fait ?

Oui mais parfois y a des astuces à savoir : http://stackoverflow.com/questions/14215303/scipy-with-py2exe

D'accord. Donc à priori jouable. Je suis en train de commencer là, et je suis les petits exemples de py2exe. Par contre, on peut bien utiliser py2exe depuis Linux ? Je lis partout qu'on ne peut pas.

EDIT: c'est bon j'y suis finalement arrivé avec py2exe. Mais je l'ai fait depuis virtual box, sur windows XP. Mais c'était pas de la tarte, et ça pèse environ 100 Mo. Et j'en chie toujours avec la dll de visual studio, mais je vais travailler là dessus. Merci à toi @Sam. Je n'ai pas eu de problème avec Qt, seulement avec scipy.

Bon cela dit, si un jour je veux porter un de mes programmes sur Windows, proprement cette fois, est-ce qu'il y a un moyen plus simple et moins lourd ? Comme faire un installateur ? Et pourquoi est-ce que windows demande qu'on mette ses dll de partout ?

On peut faire un exe moins lourd en spécifiant les dépendances dont on a pas besoin à la main. Pas besoin d'embarquer toutes les libs si on en utilise que quelques une. Ensuite, pour les DLL, c'était un problème sur les vieux windows il me semble, à partir de 7 je crois que ce n'est plus un problème. A vérifier. Enfin, tu peux utiliser un installeur de type Inno Setup pour faire le boulot de déploiement pour toi.

0 votes

Tu te montes un petit serveur web (ayant juste une IP interne), avec flask, django ou autre, et tu mets ton script python dedans.

Si ton script a besoin de fichiers de données ou de paramètres, tu crées une paqe web à l'arrache, avec un formulaire permettant d'envoyer ces infos.

Pour lancer le script, ton collègue doit aller sur l'IP interne avec son navigateur. C'est un tout petit peu plus compliqué que de cliquer sur un bouton, mais ça reste supportable.

Tu montres à ton collègue comment redémarrer le serveur. Comme ça si jamais il en a besoin et que t'es pas là, il est un minimum autonome.

Si un jour il faut faire des mises à jour, tu agis sur le serveur, pas besoin de redonner une nouvelle version à ton collègue. Et si d'autres veulent s'en servir, ils peuvent.

répondu 22-Jan-2015 par recher (380 points)

Non désolé, c'est beaucoup trop compliqué. Ce truc va devoir durer des années, sans forcément moi derrière pour faire de la maintenance, parce que je partirai du labo un jour. Typiquement, dans 5 ans s'il lance le programme, ça doit pouvoir tourner.

J'ai rarement vu une proposition aussi tordue ;) on part d'une application Qt pour finir avec un vieux formulaire moisi sur une serveur web ;), non le web ne résout pas tous les problèmes ;)

Ca dépend du programme, mais un programme qui n'est pas maintenu a de bonne chance de ne plus marcher dans cinq ans. Pense à fournir les sources (y compris la documentation de la solution que tu auras trouvé pour le rendre exécutable)

+2 votes

Tu peux aussi te touner vers une version portable de python. http://portablepython.com/. De mémoire il y a numpy, scipy et pyQT4 qui vient avec, mais si besoin tu peux "installer" des modules complémentaires. Pour le deploiement, tu n'as qu'un dossier contenant tout ce qui est nécessaire pour faire tourner ton programme.

C'est lourd par contre en terme d'espace (plus de 200mo).

répondu 23-Jan-2015 par JuJu
+4 votes

Avec PySide et Pyinstaller, j'ai un fichier qui ressemble à cela :

# -*- mode: python -*-
a = Analysis(['monprog\\prog.py'],
pathex=['Z:\\'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='prog.exe',
debug=False,
strip=None,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas + [('iconapp.png', 'monprog\\iconapp.png', 'DATA'),
('iconapp.ico', 'monprog\\iconapp.ico', 'DATA'),
('LICENSE', 'LICENSE', 'DATA'),
('README.md', 'README.md', 'DATA')],
strip=None,
upx=True,
name='pydouble')

Ensuite j'utilise Inno Setup pour packager et j'utilise ResHack pour modifier les icônes des exécutables et roulez jeunesse !

répondu 23-Jan-2015 par DoubleNain (1,686 points)

Pyinstaller sait tres bien coller une icone au .exe généré via l'option -i.
voir ici: http://pythonhosted.org/PyInstaller/#options-for-windows-apps

+1, juste pour le code.

...