# -*- coding: windows-1252 -*-
# sys.stdout.encoding
# --> 'cp850'
# sys.getdefaultencoding()
# --> 'latin1'
# locale.getdefaultlocale()
# --> 'cp1252'
# Apparemment sous win 2000 --> cp1252
# -----------------------------------------------------------
# Voir http://pythonfacile.free.fr/python/unicode.html
# --> Terminal de sortie --> La fenetre DOS
# Encodage de la fenetre DOS --> 'cp850'
# -----------------------------------------------------------
import os
import sys
import time
import glob
import _winreg
import subprocess
import locale
import string
import tarfile
from PyQt4.QtCore import *
from PyQt4.QtGui import *
"#! "+sys.executable
class DetectionRegistreApplis(object):
def find(self,dir,liste,remaining) :
try:
xdir = dir
if len(xdir) == 2:
xdir += os.sep
files = os.listdir(xdir)
except:
return remaining
# recherche des fichiers
for item in files :
if os.path.isdir(dir + os.sep + item) :
continue
for litem in liste :
if litem[2] :
continue
if( litem[0] == item ):
litem[1].append(dir)
litem[2] = True
remaining -= 1
if remaining == 0 :
return 0
# exploration des sous-repertoires
for item in files:
dir2 = dir + os.sep + item
if os.path.isfile(dir2) :
continue
remaining = self.find(dir2,liste,remaining)
if remaining == 0 :
return 0
return remaining
def __init__(self):
self.det1=self.detect_1()
def detect_1(self):
"Detection des applications utiles pour le bon fonctionnement d'EKD sous Windows Xp"
# Temps debut pour calcul
self.debut=time.clock()
separ = "# ----------------------------------------------------- #"
### Decompactage de l'archibve .tar.gz ################################
# Chemin du script courant en eliminant dependances_windows
chemin = os.getcwd()
# Recherche du chemin de l'archive .tar.gz
recherche_tar_gz = glob.glob(chemin + os.sep + 'windows' + os.sep + '*.tar.gz')
recherche_tar_gz = recherche_tar_gz[0]
# Repertoire ds lequel sera decompacte l'archive
rep_tar_gz = os.path.dirname(recherche_tar_gz)
# Repertoire Mplayer
rep_mplayer = recherche_tar_gz.split('.')
rep_mplayer = rep_mplayer[0]
if os.path.exists(recherche_tar_gz) is True:
# Si le repertoire Mplayer existe deja pas la peine de decompacter l'archive
if os.path.exists(rep_mplayer) is False:
# Décompactage de trunk.tar.gz dans le répertoire courant
t = tarfile.open(name=recherche_tar_gz, mode='r', fileobj=None, bufsize=10240)
t.extractall(path=rep_tar_gz, members=None)
print
print separ
print 'Extracting the archive: %s --> OK' % os.path.basename(recherche_tar_gz)
print separ
print
else: pass
# Elimination de l'archive elle-meme
# N'est pas elimine pour l'instant
#os.remove(recherche_tar_gz)
############################################################
#print
# Si il manque un fichier dans le repertoire 'windows\chemin_install_applis'
# dans l'arborescence d'EKD (il doit y en avoir 11):
# --> install_de_mencoder.txt
# --> install_de_ffmpeg.txt
# --> install_de_pil.txt
# --> install_de_numpy.txt
# --> install_de_pyqt4.txt
# --> install_de_imagemagick.txt
# --> install_de_ffmpeg2theora.txt
# --> install_de_lame.txt
# --> install_de_mjpegtools.txt
# --> install_de_sox.txt
# --> install_de_gmic.txt
# ... les fichiers presents sont elimines ... et tout recommencera
# a fonctionner normalement quand l'utilisateur aura bien installe
# toutes les dependances
# Si il y a 11 elements, il faut mettre --> < 11
if len(glob.glob('windows/chemin_install_applis/*')) < 11:
for fichManq in glob.glob('windows/chemin_install_applis/*'):
os.remove(fichManq)
listeAppliWin = [('install_de_mencoder.txt','mplayer,mencoder'),('install_de_ffmpeg.txt','ffmpeg'),('install_de_pil.txt','pil'),('install_de_numpy.txt','numpy'),('install_de_pyqt4.txt','pyqt4'),('install_de_imagemagick.txt','imagemagick'),('install_de_ffmpeg2theora.txt','ffmpeg2theora'),('install_de_lame.txt','lame'),('install_de_mjpegtools.txt','mjpegtools'),('install_de_sox.txt','sox'),('install_de_gmic.txt','gmic')]
### Boucle de parcours de la listeAppliWin pour vérifier la présence des fichiers de config et qu'ils sont non nul.
z=0
for depWin in listeAppliWin :
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0]):
if os.path.getsize(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0])>0:
ouv1=open(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0], 'r')
self.repOuSeTrouveMplayMenc=ouv1.read()
print '* '+depWin[1]+' --> OK'
ouv1.close()
else:
os.remove(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0])
z=1
else :
z=1
if z==1 :
print separ
print "Windows dependencies config files not found, create them"
print separ
print
# Liste pour
liste_dd=[]
# Version de la locale (fr pour langue francaise)
self.langue = locale.getdefaultlocale()[0][:2]
if self.langue == 'fr': # francais
fr_1 = " ETAPE 1 (prise d'informations pour l'installation)"
fr_2 = " Sur quel(s) lecteur(s) avez-vous installe les"
fr_3 = " dependances ? (Mplayer, Mencoder, Ffmpeg, Ffmpeg2theora,"
fr_4 = " Mjpegtools, ImageMagick, PIL, PyQt4, Numpy, Lame, Sox"
fr_5 = " et G'Mic). Tapez c si vos dependances sont uniquement dans"
fr_6 = " C:. Tapez clz (par exemple) si vos dependances sont"
fr_7 = " installees a la fois dans C:, L: et Z:."
fr_8 = " Info: les lecteurs disponibles pour l'installation des"
fr_9 = " dependances vont de C: a Z: (A: et B: ne sont pas"
fr_10 = " disponibles), si malgre tout vous choisissez A: et/ou"
fr_11 = " B:, c'est a dire les touches a et/ou b du clavier"
fr_12 = " l'installation d'EKD echouera."
fr_13 = " Indiquez maintenant dans quel(s) lecteur(s) (disque(s))"
# Solution (encodage --> raw_input) trouvee ici:
# http://mail.python.org/pipermail/python-bugs-list/2005-August/029826.html
fr_14 = " vous avez installe les dependances: "
fr_15 = " L'INSTALLATION D'EKD A ECHOUE !"
fr_16 = " ETAPE 2 (confirmation des renseignements)"
fr_17 = " Vous avez indique que les dependances sont a rechercher"
fr_18 = " dans le(s) lecteur(s): "
fr_19 = " Confirmez-vous ce choix ?, tapez la lettre o sur votre"
fr_20 = " clavier pour oui (ou bien y pour yes). Si vous tapez sur"
fr_21 = " n (pour non/no), l'installation d'EKD echouera: "
fr_22 = " L'INSTALLATION D'EKD A ECHOUE !"
fr_23 = " ETAPE 3 (trouver dependances, variables d'environnement)"
fr_24 = " Recherche des dependances pour qu'EKD puisse fonctionner"
fr_25 = " Vous devez attendre ... cela peut etre long !!! (parfois"
fr_26 = " plusieurs minutes). Les applications recherchees sont:"
fr_27 = " Au premier demarrage, cette procedure permet de savoir"
fr_28 = " si vous avez installe ce qu'il faut pour le bon"
fr_29 = " fonctionnement d'EKD."
fr_30 = " Attention a la fin de cette procedure de recherche votre"
fr_31 = " ordinateur va redemarrer pour que toutes les donnees"
fr_32 = " recoltees soient reactualisees."
err_appli_manq = u"Erreur: application manquante !"
fr_33 = u"<p><font color='blue'><b>Mplayer et Mencoder ne sont pas installées !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Mplayer-Mencoder.</b></p><p><b>Pour en savoir plus sur l'installation de Mplayer-Mencoder, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
fr_34 = '--> Mplayer, Mencoder ne sont pas installes !.'
fr_35 = u"<p><font color='blue'><b>Ffmpeg n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Ffmpeg.</b></p><p><b>Pour en savoir plus sur l'installation de Ffmpeg, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
fr_36 = "--> ffmpeg n'est pas installe !."
fr_37 = u"<p><font color='blue'><b>Ffmpeg2theora n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Ffmpeg2theora.</b></p><p><b>Pour en savoir plus sur l'installation de Ffmpeg2theora, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
fr_38 = "--> ffmpeg2theora n'est pas installe !."
fr_39 = u"<p><font color='blue'><b>ImageMagick n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé ImageMagick.</b></p><p><b>Pour en savoir plus sur l'installation d'ImageMagick, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
fr_40 = "--> ImageMagick n'est pas installe !."
fr_41 = u"<p><font color='blue'><b>Python Imaging Library n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Python Imaging Library.</b></p><p><b>Pour en savoir plus sur l'installation de Python Imaging Library, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
fr_42 = "--> Python Imaging Library n'est pas installe !."
fr_43 = u"<p><font color='blue'><b>PyQt4 n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé PyQt4.</b></p><p><b>Pour en savoir plus sur l'installation de PyQt4, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_44 = "--> PyQt4 n'est pas installe !."
fr_45 = u"<p><font color='blue'><b>Numpy n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Numpy.</b></p><p><b>Pour en savoir plus sur l'installation de Numpy, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_46 = "--> Numpy n'est pas installe !."
fr_47 = u"<p><font color='blue'><b>Lame n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Lame.</b></p><p><b>Pour en savoir plus sur l'installation de Lame, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_48 = "--> Lame n'est pas installe !."
fr_49 = u"<p><font color='blue'><b>Mjpegtools n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Mjpegtools.</b></p><p><b>Pour en savoir plus sur l'installation de Mjpegtools, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_50 = "--> Mjpegtools n'est pas installe !."
fr_51 = u"<p><font color='blue'><b>Sox n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Sox.</b></p><p><b>Pour en savoir plus sur l'installation de Sox, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_52 = "--> Sox n'est pas installe !."
fr_53 = u"<p><font color='blue'><b>G'MIC n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Sox.</b></p><p><b>Pour en savoir plus sur l'installation de G'MIC, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
fr_54 = "--> G'MIC n'est pas installe !."
else: #pass # autre que fr
fr_1 = " STEP 1 (information taken for installation)"
fr_2 = " What (s) drive (s) did you install the dependencies ?"
fr_3 = " (Mplayer, Mencoder, Ffmpeg, Ffmpeg2theora, ImageMagick,"
fr_4 = " ImageMagick, PIL, PyQt4, Numpy, Lame, Sox and G'Mic)."
fr_5 = " Type c if your dependencies are only in C:."
fr_6 = " Type clz (for example) if your dependencies are"
fr_7 = " installed in both C:, L: and Z:."
fr_8 = " Information: available drives for the installation of"
fr_9 = " dependencies ranging from C: to Z: (A: and B: not"
fr_10 = " available), though, if you choose A: and/or "
fr_11 = " B:, ie the keys a and/or b on your keyboard,"
fr_12 = " installing EKD fail."
fr_13 = " Enter now for what drive(s) (Disk(s))"
fr_14 = " you've installed the dependencies: "
fr_15 = " INSTALLATION OF EKD FAILED !"
fr_16 = " STEP 2 (confirmation of information)"
fr_17 = " You said that dependencies are to be found"
fr_18 = " in the drive(s): "
fr_19 = " Can you confirm this choice ?, type the letter o on your"
fr_20 = " keyboard for yes in french (or y for yes in English). If"
fr_21 = " you type n (for no / no), the installation of EKD fail: "
fr_22 = " INSTALLATION OF EKD FAILED !"
fr_23 = " STEP 3 (find dependencies, environment variables)"
fr_24 = " Search for dependencies for EKD"
fr_25 = " You must wait ... this may be long !!! (sometimes"
fr_26 = " several minutes). Applications are sought:"
fr_27 = " At first startup, this procedure allows to know"
fr_28 = " if you have what it takes for the proper"
fr_29 = " functioning of EKD."
fr_30 = " Attention at the end of this search procedure"
fr_31 = " will restart your computer so that all data"
fr_32 = " collected are updated."
err_appli_manq = u"Error: application missing !"
print separ
print fr_1
print separ
print fr_2
print fr_3
print fr_4
print fr_5
print fr_6
print fr_7
print fr_8
print fr_9
print fr_10
print fr_11
print fr_12
print
print fr_13
choix_1=raw_input(fr_14)
# Si l'utilisateur entre C (au clavier) au lieu de c, il n' y aura pas d'erreur
if (choix_1==choix_1 or choix_1 not in string.lowercase(choix_1) or choix_1 not in string.uppercase(choix_1)) and choix_1 not in ['a', 'b', 'ab', 'ba', 'AB', 'BA']:
for ty in range(len(choix_1)):
# Le(s) lecteur(s) est/sont systematiquement mis sous cette
# forme dans la liste: lecteur en majuscule: (par exemple C:)
liste_dd.append(string.upper(choix_1[ty])+':')
else:
print
print fr_15
print
sys.exit()
# Eliminer les doublons s'ils existent
# Peu importe avec la méthode find et l'instruction peu changer l'ordre !
#liste_dd=list(set(liste_dd))
# Classement
#liste_dd.sort() -> retiré pour laisser le choix à l'utilisateur de l'ordre de recherche des disques
# Si l'utilisateur met des espaces au debut, entre ou a la fin
# des lettres (pour indiquer les lecteurs d'install des dependances),
# ceux-ci sont enleves (j'evite une erreur au moment de la recherche
# des dependances).
for errEsp in liste_dd:
if errEsp in [' :', ':', ': ', ' : ']:
liste_dd.remove(errEsp)
print
print separ
print fr_16
print separ
print fr_17
print fr_18, ' '.join(liste_dd)
print fr_19
print fr_20
choix_2=raw_input(fr_21)
# Gestion des majuscules et/ou mots entiers pour la confirmation
if choix_2 in ['o', 'oui', 'O', 'OUI', 'Oui', 'y', 'yes', 'Y', 'YES', 'Yes']:
pass
else:
print
print fr_22
print
sys.exit()
print separ
print fr_23
print separ
print fr_24
print fr_25
print fr_26
print " * Mplayer, Mencoder"
print " * Ffmpeg"
print " * Ffmpeg2theora"
print " * ImageMagick"
print " * Python Imaging Library"
print " * PyQt4"
print " * Numpy"
print " * Lame"
print " * Mjpegtools"
print " * Sox"
print " * G'MIC"
print separ
print fr_27
print fr_28
print fr_29
print separ
print fr_30
print fr_31
print fr_32
print separ
# Si le repertoire n'existe pas, il est cree
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis') is False:
os.mkdir(os.getcwd()+os.sep+'windows'+os.sep+'chemin_install_applis')
mencoder='mencoder.exe'
ffmpeg='ffmpeg.exe'
ffmpeg2theora='ffmpeg2theora.exe'
imgMagick='composite.exe'
pil='Image.py'
pyQt4='QtGui.pyd'
numpy='fftpack.py'
lame='lame.exe'
mjpegtools_ppmtoy4m='ppmtoy4m.exe'
sox='sox.exe'
gmic='gmic.exe'
# site.py pour pour changer l'encodage
sitePointPy='site.py'
listeChemMencoder=[]
listeChemFfmpeg=[]
listeChemFfmpeg2Theora=[]
listeChemImageMagick=[]
listeChemPil=[]
listeChemPyQt4=[]
listeChemNumpy=[]
listeChemLame=[]
listeChemMjpegtools=[]
listeChemSox=[]
listeChemGMIC=[]
# Pour fichier site.py
listeChemSitePointPy=[]
# Liste des applications a chercher
liste_applis=[[mencoder,listeChemMencoder,0], [ffmpeg,listeChemFfmpeg,0], [ffmpeg2theora,listeChemFfmpeg2Theora,0], [imgMagick,listeChemImageMagick,0], [pil,listeChemPil,0], [pyQt4,listeChemPyQt4,0], [numpy,listeChemNumpy,0], [lame,listeChemLame,0], [mjpegtools_ppmtoy4m,listeChemMjpegtools,0], [sox,listeChemSox,0], [gmic,listeChemGMIC,0], [sitePointPy,listeChemSitePointPy,0]]
# Temps debut pour calcul
debut=time.clock()
remaining = len(liste_applis)
for parc_dd in liste_dd:
remaining = self.find(parc_dd, liste_applis, remaining)
if remaining == 0:
break
## for parc_app in liste_applis:
## if not parc_app[2] :
## # Recherche des chemins avec utilisation de subprocess
## # Syntaxe MS-DOS: dir C:\ /s /b | find "mencoder.exe" | more
## # (si recherche pour mencoder.exe dans C:)
## p=subprocess.Popen('''dir '''+parc_dd+'''\\ /s /b | find "'''+parc_app[0]+'''" | more''', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
## out=p.stdout.readlines()
## p.wait()
## for applis in out:
## ### Modifié le 04/10/2009 pour rendre la vérificaton générique
## # MENCODER -> parc_app[0] = exe à chercher et parc_app[1] = liste à compléter
## if os.path.basename(applis)==parc_app[0]+'\r\n':
## print os.path.dirname(applis)
## parc_app[1].append(os.path.dirname(applis))
## parc_app[2]=True # Indique qu'un chemin a déjà été trouvé pour cette dépendance.
## break # Permet d'arrêter la recherche dès que l'on a trouvé un chemin
# Si la recherche echoue (logs non installes par exemple)
# elle donne lieu a une liste vide (ne contenant rien -->
# meme par a une chaine vide). Le code ci-dessous insere
# (dans ce cas) une chaine vide dans les listes concernees
if listeChemMencoder==[]:
listeChemMencoder.append('')
if listeChemFfmpeg==[]:
listeChemFfmpeg.append('')
if listeChemFfmpeg2Theora==[]:
listeChemFfmpeg2Theora.append('')
if listeChemImageMagick==[]:
listeChemImageMagick.append('')
if listeChemPil==[]:
listeChemPil.append('')
if listeChemPyQt4==[]:
listeChemPyQt4.append('')
if listeChemNumpy==[]:
listeChemNumpy.append('')
if listeChemLame==[]:
listeChemLame.append('')
if listeChemMjpegtools==[]:
listeChemMjpegtools.append('')
if listeChemSox==[]:
listeChemSox.append('')
if listeChemGMIC==[]:
listeChemGMIC.append('')
# Repertoire ou se trouve mplayer.exe et mencoder.exe
self.repOuSeTrouveMplayMenc=listeChemMencoder[0]
if self.repOuSeTrouveMplayMenc=='':
mesErrMplayMenc=QMessageBox()
mesErrMplayMenc.setText(_(fr_33))
mesErrMplayMenc.setWindowTitle(_(err_appli_manq))
mesErrMplayMenc.setIcon(QMessageBox.Critical)
mesErrMplayMenc.exec_()
print fr_34
sys.exit(0)
# Repertoire ou se trouve ffmpeg.exe
self.repOuSeTrouveFfmpeg=listeChemFfmpeg[0]
if self.repOuSeTrouveFfmpeg=='':
mesErrFfmpeg=QMessageBox()
mesErrFfmpeg.setText(_(fr_35))
mesErrFfmpeg.setWindowTitle(_(err_appli_manq))
mesErrFfmpeg.setIcon(QMessageBox.Critical)
mesErrFfmpeg.exec_()
print fr_36
sys.exit(0)
# Repertoire ou se trouve ffmeg2theora
self.repOuSeTrouveFfmpeg2theora=listeChemFfmpeg2Theora[0]
if self.repOuSeTrouveFfmpeg2theora=='':
mesErrFfmpeg2theora=QMessageBox()
mesErrFfmpeg2theora.setText(_(fr_37))
mesErrFfmpeg2theora.setWindowTitle(_(err_appli_manq))
mesErrFfmpeg2theora.setIcon(QMessageBox.Critical)
mesErrFfmpeg2theora.exec_()
print fr_38
sys.exit(0)
# Repertoire ou se trouve composite.exe d'ImageMagick
self.repOuSeTrouveImgMagick=listeChemImageMagick[0]
if self.repOuSeTrouveImgMagick=='':
mesErrImgMagick=QMessageBox()
mesErrImgMagick.setText(_(fr_39))
mesErrImgMagick.setWindowTitle(_(err_appli_manq))
mesErrImgMagick.setIcon(QMessageBox.Critical)
mesErrImgMagick.exec_()
print fr_40
sys.exit(0)
# Repertoire ou se trouve Python Imaging Library
self.repOuSeTrouvePIL=listeChemPil[0]
if self.repOuSeTrouvePIL=='':
mesErrPil=QMessageBox()
mesErrPil.setText(_(fr_41))
mesErrPil.setWindowTitle(_(err_appli_manq))
mesErrPil.setIcon(QMessageBox.Critical)
mesErrPil.exec_()
print fr_42
sys.exit(0)
# Repertoire ou se trouve PyQt4
self.repOuSeTrouvePyQt4=listeChemPyQt4[0]
if self.repOuSeTrouvePyQt4=='':
mesErrPyQt4=QMessageBox()
mesErrPyQt4.setText(_(fr_43))
mesErrPyQt4.setWindowTitle(_(err_appli_manq))
mesErrPyQt4.setIcon(QMessageBox.Critical)
mesErrPyQt4.exec_()
print fr_44
sys.exit(0)
# Repertoire ou se trouve Numpy
self.repOuSeTrouveNumpy=listeChemNumpy[0]
if self.repOuSeTrouveNumpy=='':
mesErrNumpy=QMessageBox()
mesErrNumpy.setText(_(fr_45))
mesErrNumpy.setWindowTitle(_(err_appli_manq))
mesErrNumpy.setIcon(QMessageBox.Critical)
mesErrNumpy.exec_()
print fr_46
sys.exit(0)
# Repertoire ou se trouve Lame
self.repOuSeTrouveLame=listeChemLame[0]
if self.repOuSeTrouveLame=='':
mesErrLame=QMessageBox()
mesErrLame.setText(_(fr_47))
mesErrLame.setWindowTitle(_(err_appli_manq))
mesErrLame.setIcon(QMessageBox.Critical)
mesErrLame.exec_()
print fr_48
sys.exit(0)
# Repertoire ou se trouve Mjpegtools
self.repOuSeTrouveMjpegtools=listeChemMjpegtools[0]
if self.repOuSeTrouveMjpegtools=='':
mesErrMjpegtools=QMessageBox()
mesErrMjpegtools.setText(_(fr_49))
mesErrMjpegtools.setWindowTitle(_(err_appli_manq))
mesErrMjpegtools.setIcon(QMessageBox.Critical)
mesErrMjpegtools.exec_()
print fr_50
sys.exit(0)
# Repertoire ou se trouve Sox
self.repOuSeTrouveSox=listeChemSox[0]
if self.repOuSeTrouveSox=='':
mesErrSox=QMessageBox()
mesErrSox.setText(_(fr_51))
mesErrSox.setWindowTitle(_(err_appli_manq))
mesErrSox.setIcon(QMessageBox.Critical)
mesErrSox.exec_()
print fr_52
sys.exit(0)
# Repertoire ou se trouve G'MIC
self.repOuSeTrouveGMIC=listeChemGMIC[0]
if self.repOuSeTrouveSox=='':
mesErrGMIC=QMessageBox()
mesErrGMIC.setText(_(fr_53))
mesErrGMIC.setWindowTitle(_(err_appli_manq))
mesErrGMIC.setIcon(QMessageBox.Critical)
mesErrGMIC.exec_()
print fr_54
sys.exit(0)
# Repertoire ou se trouve site.py (pour chang encodage ascii vers latin1)
self.repOuSeTrouveSitePointPy=listeChemSitePointPy[0]
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mencoder.txt') is False:
# Ecriture dans le fichier 'install_de_mencoder.txt' du chemin d'installation de mencoder (et mplayer)
chemInstallMencoder=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mencoder.txt', 'w')
chemInstallMencoder.write(self.repOuSeTrouveMplayMenc)
chemInstallMencoder.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg.txt') is False:
# Ecriture dans le fichier 'install_de_ffmpeg.txt' du chemin d'installation de ffmpeg
chemInstallFfmpeg=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg.txt', 'w')
chemInstallFfmpeg.write(self.repOuSeTrouveFfmpeg)
chemInstallFfmpeg.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_imagemagick.txt') is False:
# Ecriture dans le fichier 'install_de_imagemagick.txt' du chemin d'installation d'ImageMagick
chemInstallImgMagick=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_imagemagick.txt', 'w')
chemInstallImgMagick.write(self.repOuSeTrouveImgMagick)
chemInstallImgMagick.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pil.txt') is False:
# Ecriture dans le fichier 'install_de_pil.txt' du chemin d'installation de Python Imaging Library
chemInstallPIL=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pil.txt', 'w')
chemInstallPIL.write(self.repOuSeTrouvePIL)
chemInstallPIL.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pyqt4.txt') is False:
# Ecriture dans le fichier 'install_de_pyqt4.txt' du chemin de PyQt4
chemInstallPyQt4=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pyqt4.txt', 'w')
chemInstallPyQt4.write(self.repOuSeTrouvePyQt4)
chemInstallPyQt4.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_numpy.txt') is False:
# Ecriture dans le fichier 'install_de_numpy.txt' du chemin d'installation de Numpy
chemInstallNumpy=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_numpy.txt', 'w')
chemInstallNumpy.write(self.repOuSeTrouveNumpy)
chemInstallNumpy.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg2theora.txt') is False:
# Ecriture dans le fichier 'install_de_ffmpeg2theora.txt' du chemin de ffmpeg2theora
chemInstallFfmpeg2theora=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg2theora.txt', 'w')
chemInstallFfmpeg2theora.write(self.repOuSeTrouveFfmpeg2theora)
chemInstallFfmpeg2theora.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_lame.txt') is False:
# Ecriture dans le fichier 'install_de_lame.txt' du chemin de Lame
chemInstallLame=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_lame.txt', 'w')
chemInstallLame.write(self.repOuSeTrouveLame)
chemInstallLame.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mjpegtools.txt') is False:
# Ecriture dans le fichier 'install_de_mjpegtools.txt' du chemin de Mjpegtools
chemInstallMjpegtools=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mjpegtools.txt', 'w')
chemInstallMjpegtools.write(self.repOuSeTrouveMjpegtools)
chemInstallMjpegtools.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_sox.txt') is False:
# Ecriture dans le fichier 'install_de_sox.txt' du chemin de Sox
chemInstallSox=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_sox.txt', 'w')
chemInstallSox.write(self.repOuSeTrouveSox)
chemInstallSox.close()
if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_gmic.txt') is False:
# Ecriture dans le fichier 'install_de_gmic.txt' du chemin de G'MIC
chemInstallGMIC=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_gmic.txt', 'w')
chemInstallGMIC.write(self.repOuSeTrouveGMIC)
chemInstallGMIC.close()
# Si le francais est detecte pour un pays (ou region) a langage francophone ...
# C'est la seule solution qui fonctionne sous windows (pour la gestion des
# chemins et/ou fichiers) avec accents. Il s'agit de modifier la variable
# encoding dans le fichier site.py situee dans le repertoire (si Python 2.6
# par exemple): ...\Python26\Lib. L'encodage par defaut ascii est transforme
# en latin1
loc=locale.getdefaultlocale()[0]
if loc in ['fr_BE', 'fr_CA', 'fr_CH', 'fr_FR', 'fr_LU']:
ouvSPPy=open(self.repOuSeTrouveSitePointPy+"\\site.py", "rb")
enrSPPy=open("windows\\chemin_install_applis\\site.py", "wb")
# Ecriture dans le fichier
lEncSite=ouvSPPy.readlines()
for parcEncSite in lEncSite:
if parcEncSite==' encoding = "ascii" # Default value set by _PyUnicode_Init()\r\n':
parcEncSite=' encoding = "latin1" # Default value set by _PyUnicode_Init()\r\n'
enrSPPy.write(parcEncSite)
else:
enrSPPy.write(parcEncSite)
# Fermeture
ouvSPPy.close()
enrSPPy.close()
# Copie/ecrasement de site.py contenu dans ...\Python26\Lib (si Python 2.6)
import shutil
shutil.copy(os.getcwd()+'\\windows\\chemin_install_applis\\site.py', self.repOuSeTrouveSitePointPy+'\\site.py')
# Elimination du fichier (car cela pourrait poser des problemes lors
# d'une nouvelle recherche de site.py)
os.remove(os.getcwd()+'\\windows\\chemin_install_applis\\site.py')
self.fin=time.clock()
tempsDeTraitement=self.fin-self.debut
print
print 'Temps de la recherche: %d secondes' % tempsDeTraitement
print
# Application des variables d'environnement et redemarrage
# de la machine uniquement si les dependances n'avaient
# prealablement pas ete installees.
self.variableEnv()
def variableEnv(self):
"Application des variables d'environnement dans la base de registre. Adapte de l'excellent script: http://mail.python.org/pipermail/python-list/2003-December/240977.html"
self.item='path'
self.keypath = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
if self.repOuSeTrouveMplayMenc!='' and self.repOuSeTrouveFfmpeg!='' and self.repOuSeTrouveFfmpeg2theora!='' and self.repOuSeTrouveLame!='' and self.repOuSeTrouveMjpegtools!='' and self.repOuSeTrouveSox!='' and self.repOuSeTrouveGMIC!='':
# Boucle pour inserer les chemins (detectes ds la fonction detect_1) dans la base de registre
for self.newPart in [self.repOuSeTrouveMplayMenc, self.repOuSeTrouveFfmpeg, self.repOuSeTrouveFfmpeg2theora, self.repOuSeTrouveLame, self.repOuSeTrouveMjpegtools, self.repOuSeTrouveSox, self.repOuSeTrouveGMIC]:
self.key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.keypath)
self.path, self.dataType = _winreg.QueryValueEx(self.key, self.item)
self.key.Close()
#print
#print "Le chemin actuel des variables d'environnement est:\n\n%s" % self.path
#print
if self.path.lower().find(self.newPart.lower()) == -1:
#print
#print 'Il ne contient pas', self.newPart
#print
self.path = os.pathsep.join(self.path.split(os.pathsep) + [self.newPart])
self.key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.keypath, 0, _winreg.KEY_SET_VALUE)
_winreg.SetValueEx(self.key, self.item, 0, self.dataType, self.path)
self.key.Close()
#print
#print "Nouveau chemin des variables d'environnement:\n\n%s" % self.path
#print
#else:
#print "Rien a faire -- tout est deja ok pour les variables d'environnement"
# Redemarrage de la machine afin que les variables d'environnement soient actives
os.system('shutdown -r -t 0 -f')