Página 1 de 1

PB doble antislash

Publicado: 8 de diciembre de 2016 - 11:31
por adaurg
Buen día,

En primer lugar, un enorme agradecimiento al equipo de desarrollo por esta fantástica solución que me hace la vida mucho más fácil ;)

Después de configurar la implementación de los paquetes clásicos.
Estoy abordando la creación de mis primeros paquetes… Lo siento, también soy un novato en Python :D

Estoy buscando instalar Qgis 2.14.9.
Instalar Qgis 2.14.9 no es un problema, EXCEPTO que primero tengo que desinstalar la versión anterior: 2.14.3 (que no se instaló con wapt, de lo contrario podría haber usado la función "conflictos" si entiendo correctamente)

Así que configuré esto:

Código: Seleccionar todo

from setuphelpers import *

uninstallkey = ['QGIS 2.14']

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()

    print('desinstallation de Qgis 2.14.3')
    sofname = 'Qgis Essen'
    versionsoft = '2.14.3'
    uninstallkey = ['QGIS Essen']
    check_installed_soft = installed_softwares(sofname)
    if check_installed_soft:
        for uninstall in check_installed_soft:
            if Version(uninstall['version']) < Version(versionsoft):
                cmd = WAPT.uninstall_cmd(uninstall['key'])
                run(cmd)

    run(r'"QGIS-OSGeo4W-2.14.9-2-Setup-x86_64.exe" /S')
    remove_desktop_shortcut(r'GRASS GIS 7.0.4')
    remove_desktop_shortcut(r'GRASS GIS 7.0.5')
    remove_desktop_shortcut(r'OSGeo4W Shell')
    remove_tree(r'C:\Users\Public\Desktop\QGIS Essen')
    remove_tree(r'C:\Users\Public\Desktop\QGIS 2.14')
excepto que cuando lo ejecuto, aparecen barras invertidas dobles en la ruta del ejecutable de desinstalación agregado aunque el valor en el registro sea correcto.

Código: Seleccionar todo

FATAL ERROR : CalledProcessError: Command '([u'C:\\Program Files\\QGIS Essen\\Un
install-QGIS.exe', '/S'],)' returned non-zero exit status 1
Busqué en las publicaciones del foro pero no encontré nada :llorar:

¿Cuál es la manera de solucionar este problema?

Gracias por su ayuda
Denis

Re: Problema con la doble barra invertida

Publicado: 8 de diciembre de 2016 - 11:44 a. m.
por htouvet
Las barras invertidas dobles son "normales"
Esta es la visualización del contenido de una cadena de caracteres con las barras invertidas "escapadas" (para que no se interpreten como caracteres de control)

El problema está en otra parte, probablemente un problema de 32/64 bits.
Wapt es un proceso de 32 bits. Por lo tanto, Windows cambia automáticamente C:\Archivos de programa\ a C:\Archivos de programa (x86)\

Por lo tanto, le sugiero que deshabilite la redirección automática de Windows 32/64 mediante la función de contexto "with disable_file_system_redirection():"

Código: Seleccionar todo

..
    if check_installed_soft:
        for uninstall in check_installed_soft:
            if Version(uninstall['version']) < Version(versionsoft):
                with disable_file_system_redirection():
                    cmd = WAPT.uninstall_cmd(uninstall['key'])
                    run(cmd)

...

Re: Problema con la doble barra invertida

Publicado: 8 de diciembre de 2016 - 13:58
por adaurg
Gracias por la rápida respuesta.
Tomo nota de las barras invertidas dobles. :ups:

Efectivamente, QGIS 2.14.3 es de 64 bits.

Lo probé desactivando la redirección automática como se indicaba (gracias por el código).

Pero... el error persiste... ¿

Quizás pueda solucionar el problema con un archivo .bat (aunque no sea la solución más limpia)?
En ese caso, ¿debería colocar el archivo .bat en el mismo directorio que el archivo setup.py? ¿O en una carpeta compartida de la red?

Gracias,
Denis

Re: Problema con la doble barra invertida

Publicado: 8 de diciembre de 2016 - 14:47
por htouvet
Puedes inspirarte en:

Código: Seleccionar todo

from setuphelpers import *
import glob,time
import regutil

uninstallkey = []

version = '2.16.2-3'
url = "http://qgis.org/downloads/QGIS-OSGeo4W-%s-Setup-x86.exe" % version
url64 = "http://qgis.org/downloads/QGIS-OSGeo4W-%s-Setup-x86_64.exe" % version
exe = "QGIS-OSGeo4W-%s-Setup-x86.exe" % version
exe64 = "QGIS-OSGeo4W-%s-Setup-x86_64.exe" % version

def install():
    with disable_file_system_redirection():
        #Remove Old Versions in Default Directory
        for uninstall in glob.glob(makepath(programfiles,'QGIS*','Uninstall-QGIS.exe')):
            run_notfatal('"%s" /S'%uninstall)
            time.sleep(30)

        if isdir(makepath(programfiles,'QGIS 2.16.2')):
            remove_tree(makepath(programfiles,'QGIS 2.16.2'))

        #Fix bug with QGIS thinking it is still installed
        registry_delete(HKEY_LOCAL_MACHINE,makepath('Software','QGIS 2.16.2'),None)

    if iswin64():
        install_exe_if_needed(exe64,'/S',key='QGIS 2.16',min_version='')
    else:
        install_exe_if_needed(exe,'/S',key='QGIS Wien',min_version='')


Re: Problema con la doble barra invertida

Publicado: 13 de diciembre de 2016 - 22:40
por adaurg
Gracias por su ayuda

Eso me salvó...
Todavía necesito mejorar mis habilidades en Python... pero lo hice así

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
import glob,time
import regutil

uninstallkey = ['QGIS 2.14']

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()

    print('desinstallation de Qgis 2.14.3')
    with disable_file_system_redirection():
        #Remove Old Versions in Default Directory
        for uninstall in glob.glob(makepath(programfiles,'QGIS*','Uninstall-QGIS.exe')):
            run_notfatal('"%s" /S'%uninstall)
            time.sleep(30)

        #Fix bug with QGIS thinking it is still installed
        registry_deletekey(HKEY_LOCAL_MACHINE,'software\microsoft\windows\currentversion\uninstall','QGIS Essen')
        registry_deletekey(HKEY_LOCAL_MACHINE,'software','QGIS Essen')


    run(r'"QGIS-OSGeo4W-2.14.9-2-Setup-x86_64.exe" /S')
    remove_desktop_shortcut(r'GRASS GIS 7.0.4')
    remove_desktop_shortcut(r'GRASS GIS 7.0.5')
    remove_desktop_shortcut(r'OSGeo4W Shell')
    remove_tree(r'C:\Users\Public\Desktop\QGIS Essen')
    remove_tree(r'C:\Users\Public\Desktop\QGIS 2.14')
    if isdir(makepath(programfiles,'QGIS Essen')):
            remove_tree(makepath(programfiles,'QGIS Essen'))
Y funciona. :PAG

¿Estás planeando crear una sección especial para compartir archivos setup.py?

GRACIAS

Re: Problema con la doble barra invertida

Publicado: 14 de diciembre de 2016 - 22:31
por sfonteneau
Atención aquí:

Código: Seleccionar todo

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()
  
Saldrá aquí si qgis-bin.exe está abierto

Por lo tanto, no habrá un segundo intento

Necesitarías reemplazarlo con

Código: Seleccionar todo

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        error("Qgis est ouvert !!! GRRRR...")
  

Re: Problema con la doble barra invertida

Publicado: 15 de diciembre de 2016 - 08:13
por htouvet
Además, especifique que las barras invertidas no deben interpretarse colocando una cadena sin formato 'r' antes de la ruta de la clave de registro.

'r'software\microsoft\windows\currentversion\uninstall'