¿Cómo instalar el framework (desde el archivo pkg) en una ubicación no estándar?

1

En resumen, mi pregunta es esta:

¿Cómo puedo instalar un marco desde un archivo & ast; .pkg en algún lugar que no sea /Library/Frameworks (o /System/Library/Frameworks )?

Background

Quiero instalar una versión de Python 2.7.3 que vive en $HOME/Library/Frameworks/Python.framework y $HOME/python .

Mi objetivo aquí es tener una versión de Python que sea lo más independiente posible de Python que viene con OS X Lion. En particular, quiero tener una instalación de Python que, en la medida de lo posible, no pueda ser modificada "por detrás" por las actualizaciones del sistema u otras actualizaciones de software. Por eso quiero mantener esta instalación lo más clara posible lejos de los lugares "estándar" para ellos.

Entre los problemas que trato de evitar al hacer esto está el marco de Tk con errores que viene con la última versiones de OS X.

Por lo tanto, un subobjetivo clave aquí es instalar nuevos frameworks Tcl y Tk, separados de los suministrados por el sistema. Los que quiero instalar provienen de ActiveState ("Mac OS X (10.5+, x86_64 / x86)") , en la forma de un archivo * .pkg.

Cuando hago clic en este archivo, se me presenta la secuencia de pasos ("Introducción", "Licencia", etc.) que suele ser "asistente". En ningún momento durante esta secuencia, se me ofrece la oportunidad de elegir una ubicación de instalación diferente para estos marcos antes de que tenga la opción de hacer clic en el botón INSTALL . 1

Sospecho que si hago clic en este botón, los archivos instalados estarán por debajo de /Library/Frameworks (o posiblemente por debajo de /System/Library/Frameworks ), que es lo que estoy tratando de evitar. (De hecho, cuando hago clic en INSTALAR , inmediatamente aparece un cuadro de diálogo para ingresar la contraseña, lo cual es una buena indicación de que la instalación colocará archivos en algún lugar debajo de /Library o /System . )

Por lo tanto, estoy buscando una forma alternativa de realizar esta instalación que me permita establecer explícitamente la carpeta de destino para los archivos instalados.

1 Sí, el instalador me permite elegir un volumen diferente para la instalación, pero no me permite especificar, por ejemplo, $HOME/Library/Frameworks como el destino de los archivos instalados.

    
pregunta kjo 04.03.2013 - 22:01

2 respuestas

2

En términos generales, solo puede reubicar un paquete (es decir, instalarlo en un directorio diferente) que se ha creado teniendo en cuenta la reubicación .

Si el paquete lo admite, se puede reubicar con el equivalente de línea de comando de Installer.app , convenientemente llamado installer , con la opción -target (de man installer ):

  

El volumen de destino se especifica con el parámetro -target ( -tgt is   aceptado como sinónimo).

El argumento para -target es:

  1. Un punto de montaje de volumen ( /Volumes/HDD ), nodo de dispositivo ( /dev/disk0s5 ) o UUID de volumen ( 376C4046-083E-334F-AF08-62FAFBC4E352 ), por ejemplo:

    installer -pkg InstallMe.pkg -target / 
    
  2. Cualquiera de los valores devueltos por -dominfo ( LocalSystem o CurrentUserHomeDirectory ), por ejemplo:

    installer -pkg InstallMe.pkg -target CurrentUserHomeDirectory
    

(Como puede ver, el último comando parece muy prometedor. Instalaría InstallMe.pkg en la jerarquía del directorio de inicio del usuario actual).

En nuestro caso específico, desafortunadamente, el paquete Tcl de ActiveState no fue diseñado para ser reubicado :

  • No devuelve ninguna información para -dominfo :

    $ installer -verbose -dominfo -pkg ActiveTcl-8.6.pkg
    Domain information:
    NoDomainsAvailable
    
  • Aunque el archivo pkg se puede instalar con éxito en otro volumen:

    $ sudo installer -verbose -pkg ActiveTcl-8.6.pkg -target /Volumes/DISK2GO/
    installer: Package name is ActiveState ActiveTcl 8.6.0.0.296563
    installer: Installing at base path /Volumes/DISK2GO
    (...)   
    #
    installer: Writing files….....
    (...)
    installer: The software was successfully installed......
    installer: The install was successful.
    #
    

    como se puede ver aquí:

    no funciona:

    $ cd /Volumes/DISK2GO/usr/local/bin/
    $ ./tclsh8.6
    dyld: Library not loaded:
    /Library/Frameworks/Tcl.framework/Versions/8.6/Tcl
      Referenced from: /Volumes/DISK2GO/usr/local/bin/./tclsh8.6
      Reason: image not found
    Trace/BPT trap: 5
    $  ./tclselect 
    -bash: ./tclselect: /usr/local/bin/tclsh: bad interpreter: No such file or directory
    

El motivo es que los scripts y las herramientas compiladas se utilizan y están vinculados a /Library/Frameworks :

$ cd /Volumes/DISK2GO/usr/local/bin/
$ otool -L tclsh8.6 
 tclsh8.6:
 /Library/Frameworks/Tcl.framework/Versions/8.6/Tcl (compatibility version 8.6.0, current version 8.6.0)
(...)
$ grep Library tclselect 
#  /Library/Frameworks
# installation. I.e. a Tcl installed in '/Library/Frameworks' and
return /Library/Frameworks/Tcl.framework/Versions

Si desea utilizar la Tcl de ActiveState, debe instalar el paquete en su ubicación predeterminada.

Y por lo que puedo decir, no entrará en conflicto con el marco Tcl instalado :

  • El propio marco de trabajo de OS X se instala en /System/Library/Frameworks/Tk.framework/ , algunos binarios en /usr/bin .

  • El Tcl de ActiveState se instala en /Library/Frameworks/Tcl.framework , /Library/Frameworks/Tk.framework , /Library/Tcl y /usr/local/bin (para una lista completa, haga doble clic en el archivo pkg y seleccione Archivo > ShowFiles).

respondido por el jaume 05.03.2013 - 00:05
2

Puedes instalar Python de forma segura en /Library/Frameworks y no preocuparte si interfiere con el "sistema" de Python, aunque con algunos enlaces simbólicos y / o $PATH de cambios, puedes hacerlo como predeterminado si lo deseas.

Como alternativa, puedes instalar MacPorts y establecer su raíz de instalación en lo que quieras (el valor predeterminado es /opt/local , creo , aunque esto es configurable durante la configuración), aunque el marco de Python todavía se instalará bajo un subdirectorio Library/Frameworks . Prefiero la distribución de MacPorts en lugar de python.org porque hay muchos módulos adicionales que puede instalar que están preconfigurados para compilar correctamente, que no siempre es el caso cuando usas pip o easy_install , dependiendo de lo que estés tratando de construir. MacPorts también tiene un sistema de versionamiento bastante decente, que permite que varias versiones coexistan lado a lado, con herramientas simples para alternar entre ellas. Como bono adicional, el MacPorts Tcl no está "roto", por lo que todo debería funcionar fuera de la caja. YMMV :)

    
respondido por el MattDMo 04.03.2013 - 23:11

Lea otras preguntas en las etiquetas