Come installare framework (dal file pkg) in una posizione non standard?

2

In breve, la mia domanda è questa:

Come posso installare un framework da un file & ast ;.pkg da qualche parte diverso da /Library/Frameworks (o /System/Library/Frameworks )?

Sfondo

Voglio installare una versione di Python 2.7.3 che vive al di sotto di $HOME/Library/Frameworks/Python.framework e $HOME/python .

Il mio obiettivo qui è avere una versione di Python che sia il più indipendente possibile dal Python fornito con OS X Lion. In particolare, voglio avere un'installazione di Python che sia, per quanto possibile, non suscettibile di essere alterata "behind-my-back" da aggiornamenti di sistema o altri aggiornamenti software. Ecco perché voglio mantenere questa installazione il più chiara possibile lontano dai luoghi "standard" per loro.

Tra i problemi che sto cercando di evitare, il framework Tk buggy fornito con gli ultimi versioni di OS X.

Pertanto, un obiettivo secondario chiave è installare nuovi framework Tcl e Tk, separati da quelli forniti dal sistema. Quelli che voglio installare provengono da ActiveState ("Mac OS X (10.5+, x86_64 / x86)") , in la forma di un file * .pkg.

Quando clicco su questo file, mi viene presentata la solita sequenza di passaggi "wizard" ("Introduzione", "Licenza", ecc.). In nessun momento durante questa sequenza mi viene offerta l'opportunità di scegliere un percorso di installazione diverso per questi framework prima di raggiungere la scelta di fare clic sul pulsante INSTALL . 1

Ho il sospetto che se faccio clic su questo pulsante, i file installati andranno sotto /Library/Frameworks (o forse sotto /System/Library/Frameworks ), che è quello che sto cercando di evitare. (Infatti, quando clicco su INSTALL , mi viene immediatamente presentata una finestra di dialogo per l'immissione della password, che è una buona indicazione che l'installazione metterà i file da qualche parte sotto /Library o /System . )

Pertanto, sto cercando un modo alternativo per eseguire questa installazione che mi consentirà di impostare esplicitamente la cartella di destinazione per i file installati.

1 Sì, il programma di installazione mi consente di scegliere un volume diverso per l'installazione, ma non mi permette di specificare, ad esempio, $HOME/Library/Frameworks come destinazione per i file installati.

    
posta kjo 04.03.2013 - 22:01
fonte

2 risposte

2

In generale, puoi solo spostare un pacchetto (ovvero installarlo in una directory diversa) che è stato creato pensando al riposizionamento .

Se il pacchetto lo supporta, può essere spostato con l'equivalente a riga di comando di Installer.app , convenientemente chiamato installer , con l'opzione -target (da man installer ):

The target volume is specified with the -target parameter (-tgt is accepted as a synonym).

L'argomento su -target è:

  1. Un punto di montaggio del volume ( /Volumes/HDD ), nodo del dispositivo ( /dev/disk0s5 ) o UUID del volume ( 376C4046-083E-334F-AF08-62FAFBC4E352 ), ad esempio:

    installer -pkg InstallMe.pkg -target / 
    
  2. Tutti i valori restituiti da -dominfo ( LocalSystem o CurrentUserHomeDirectory ), ad esempio:

    installer -pkg InstallMe.pkg -target CurrentUserHomeDirectory
    

(Come vedi, l'ultimo comando sembra molto promettente: installerebbe InstallMe.pkg nella gerarchia della directory home dell'utente corrente.)

Nel nostro caso specifico, sfortunatamente il pacchetto Tcl di ActiveState non è stato progettato per essere spostato :

  • Non restituisce alcuna informazione per -dominfo :

    $ installer -verbose -dominfo -pkg ActiveTcl-8.6.pkg
    Domain information:
    NoDomainsAvailable
    
  • Sebbene il file pkg possa essere installato con successo su un altro volume:

    $ 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.
    #
    

    come può essere visto qui:

    non funziona:

    $ 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
    

Il motivo è che gli script e gli strumenti compilati utilizzano e sono collegati 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

Se si desidera utilizzare Tcl di ActiveState, è necessario installare il pacchetto nella sua posizione predefinita.

E per quanto posso dire, non entrerà in conflitto con il framework Tcl installato :

  • Il framework di OS X è installato in /System/Library/Frameworks/Tk.framework/ , alcuni file binari in /usr/bin .

  • Tcl di ActiveState installa in /Library/Frameworks/Tcl.framework , /Library/Frameworks/Tk.framework , /Library/Tcl e /usr/local/bin (per un elenco completo, fai doppio clic sul file pkg e seleziona File > ShowFiles).

risposta data 05.03.2013 - 00:05
fonte
2

Puoi tranquillamente installare Python sotto /Library/Frameworks e non preoccuparti che interferisca con il "sistema" Python, anche se con alcuni link simbolici e / o% di modifiche di co_de puoi renderlo predefinito se lo desideri.

In alternativa, puoi installare MacPorts e impostare la sua root di installazione su ciò che vuoi (il valore predefinito è $PATH , credo , sebbene questo sia configurabile durante l'installazione), anche se il framework Python verrà comunque installato in una sottodirectory /opt/local . Preferisco la distribuzione MacPorts su python.org perché ci sono molti moduli aggiuntivi che è possibile installare che sono preconfigurati per essere compilati correttamente, non è sempre il caso quando usi Library/Frameworks o pip , a seconda di cosa stai cercando di costruire. MacPorts ha anche un sistema di versioning piuttosto decente, che consente a più versioni di coesistere fianco a fianco, con semplici strumenti per passare da una all'altra. Come bonus aggiuntivo, MacPorts Tcl non è "rotto", quindi tutto dovrebbe lavorare fuori dalla scatola. YMMV:)

    
risposta data 04.03.2013 - 23:11
fonte

Leggi altre domande sui tag