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

En resumen, mi pregunta es esta:

¿Cómo puedo instalar un marco desde un archivo *.pkg en otro lugar que no sea debajo /Library/Frameworks(o /System/Library/Frameworks)?


Fondo

Quiero instalar una versión de Python 2.7.3 que viva bajo $HOME/Library/Frameworks/Python.frameworky $HOME/python.

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

Entre los problemas que estoy tratando de evitar al hacer esto está el framework Tk con errores que viene con las últimas versiones de OS X.

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

Cuando hago clic en este archivo, aparece la secuencia de pasos similar a un "asistente" habitual ("Introducción", "Licencia", etc.). 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 llegar a la opción de hacer clic en el INSTALLbotón. 1

Sospecho que si hago clic en este botón, los archivos instalados quedarán debajo /Library/Frameworks(o posiblemente debajo /System/Library/Frameworks), que es lo que estoy tratando de evitar. (De hecho, cuando hago clic en INSTALL, aparece inmediatamente un cuadro de diálogo de ingreso de contraseña, que es una buena indicación de que la instalación colocará los archivos en algún lugar debajo de /Libraryo /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 deja especificar, por ejemplo, $HOME/Library/Frameworkscomo destino para los archivos instalados.

Las actualizaciones del sistema solo actualizarán el python suministrado por Apple, cualquier otro python estará separado

Respuestas (2)

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

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

El volumen objetivo se especifica con el -targetparámetro ( -tgtse acepta como sinónimo).

El argumento a -targetes:

  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( LocalSystemo CurrentUserHomeDirectory), por ejemplo:

    installer -pkg InstallMe.pkg -target CurrentUserHomeDirectory
    

(Como puede ver, el último comando parece muy prometedor. Se instalaría InstallMe.pkgen 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 pkgarchivo 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í:

    ingrese la descripción de la imagen 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
    

La razón es que los scripts y las herramientas compiladas usan 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 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 marco propio de OS X está instalado en /System/Library/Frameworks/Tk.framework/, algunos binarios en /usr/bin.

  • Tcl de ActiveState se instala en /Library/Frameworks/Tcl.framework, /Library/Frameworks/Tk.frameworky (para obtener una lista completa, haga doble clic en el archivo y seleccione Archivo /Library/Tcl> Mostrar archivos)./usr/local/binpkg

Puede instalar Python de forma segura /Library/Frameworksy no preocuparse de que interfiera con el "sistema" Python, aunque con algunos enlaces simbólicos y/o $PATHcambios puede convertirlo en el predeterminado si lo desea.

Como alternativa, puede instalar MacPorts y establecer su raíz de instalación en lo que desee (el valor predeterminado es /opt/local, creo, aunque esto se puede configurar durante la instalación), aunque el marco de trabajo de Python aún se instalará en un Library/Frameworkssubdirectorio. Prefiero la distribución de MacPorts sobre la de python.org porque hay muchos módulos adicionales que puede instalar que están preconfigurados para compilarse correctamente, lo que no siempre es el caso cuando usa pipo easy_install, dependiendo de lo que esté tratando de compilar . MacPorts también tiene un sistema de control de versiones bastante decente, que permite que múltiples versiones coexistan una al lado de la otra, con herramientas simples para cambiar entre ellas. Como beneficio adicional, MacPorts Tcl no está "roto", por lo que todo deberíatrabajar fuera de la caja. YMMV :)