2 votos

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

En breve, mi pregunta es la siguiente:

¿Cómo puedo instalar un marco de un *.archivo pkg en un lugar distinto de bajo /Library/Frameworks (o /System/Library/Frameworks)?


De fondo

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

Mi objetivo aquí es tener una versión de Python que es tan independiente como sea posible de los Python que viene con OS X Lion. En particular, quiero tener una instalación de Python que es, tanto como sea posible, no susceptibles de ser alterados del "detrás de mi espalda" por las actualizaciones del sistema o de otras actualizaciones de software. Es por eso que quiero mantener esta instalación tan claro como sea posible, lejos del "estándar" de los lugares para ellos.

Entre los problemas que estoy tratando de evitar al hacer esto es el buggy Tk marco que viene con las últimas versiones de OS X.

Por lo tanto, una clave de sub-objetivo aquí es para instalar el nuevo Tcl y Tk marcos, independiente de la de los proporcionados por el sistema. La 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, me sale presentado con el habitual "asistente"como la secuencia de pasos ("Introducción", "Licencia", etc.). En ningún momento durante esta secuencia me ha ofrecido la oportunidad de elegir una ubicación diferente de la instalación de estos marcos antes de llegar a la opción de hacer clic en el INSTALAR el botón.1

Sospecho que si hago clic en este botón, la instalación de archivos bajo /Library/Frameworks (o posiblemente bajo /System/Library/Frameworks), que es lo que estoy tratando de evitar. (De hecho, cuando hago clic en INSTALAR, estoy presentó de inmediato con una contraseña de diálogo de entrada, lo cual es un buen indicio de que la instalación se ponga los archivos en algún lugar bajo /Library o /System.)

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

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

2voto

Jihane Puntos 6

De forma segura puede instalar Python bajo /Library/Frameworks y no te preocupes por eso interferir con el "sistema" de Python, aunque con un par de enlaces y/o $PATH cambios que usted puede hacer es el valor predeterminado si desea.

Como alternativa, puede instalar MacPorts y establecer su root de instalación a lo que usted desea (el valor por defecto es /opt/local, creo, aunque esto se puede configurar durante la instalación), aunque el Python marco todavía va a ser instalado en un Library/Frameworks subdirectorio. Yo prefiero el MacPorts distribución a través de python.org uno porque hay muchos módulos adicionales que se pueden instalar los cuales son pre-configurado para construir correctamente, lo que no siempre es el caso cuando se utiliza pip o easy_install, dependiendo de lo que usted está tratando de construir. MacPorts también tiene un buen sistema de control de versiones, lo que permite múltiples versiones que coexisten lado a lado, con herramientas simples para cambiar entre ellos. Como un bono adicional, los MacPorts Tcl no es "roto", así que todo debería funcionar fuera de la caja. YMMV :)

2voto

Phill Puntos 126

Generalmente hablando, usted sólo puede cambiar la posición de un paquete (que es, instalarlo en un directorio diferente) que ha sido construido con la reubicación en mente.

Si el paquete es compatible, puede ser reubicados con el equivalente de línea de comandos de Installer.app, convenientemente llamado installer, con opción -target (de man installer):

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

El argumento a -target está:

  1. Un punto de montaje de volumen (/Volumes/HDD), nodo de dispositivo (/dev/disk0s5) o el volumen UUID (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 se puede ver, el último comando se ve muy prometedor. Se instalaría InstallMe.pkg en la jerarquía del directorio de inicio del usuario actual.)

En nuestro caso específico, por desgracia, de ActiveState del Tcl paquete no fue diseñado para ser reubicados:

  • No devuelve ninguna información para -dominfo:

    $ installer -verbose -dominfo -pkg ActiveTcl-8.6.pkg
    Domain information:
    NoDomainsAvailable
    
  • A pesar de la pkg archivo puede ser instalado correctamente 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í:

    enter image description here

    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 compilados y herramientas de uso 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 ActiveState del Tcl debe instalar el paquete en su ubicación predeterminada.

Y como lo que yo puedo decir, que no entre en conflicto con el instalado Tcl marco:

  • OS X propio framework está instalado en /System/Library/Frameworks/Tk.framework/, algunos binarios en /usr/bin.

  • ActiveState del Tcl 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 pkg archivo y seleccione archivo>los ficheros de espectáculos).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X