2 votes

Comment installer le framework (à partir du fichier pkg) dans un emplacement non standard ?

En bref, ma question est la suivante :

Comment puis-je installer un framework à partir d'un fichier *.pkg à un endroit autre que sous la rubrique /Library/Frameworks (ou /System/Library/Frameworks ) ?


Contexte

Je veux installer une version de Python 2.7.3 qui se trouve sous $HOME/Library/Frameworks/Python.framework y $HOME/python .

Mon objectif ici est d'avoir une version de Python qui soit aussi indépendante que possible du Python fourni avec OS X Lion. En particulier, je veux avoir une installation de Python qui ne soit pas, autant que possible, susceptible d'être modifiée "derrière mon dos" par des mises à jour du système ou d'autres logiciels. C'est pourquoi je veux que cette installation soit aussi éloignée que possible des endroits "standard" pour eux.

Parmi les problèmes que j'essaie d'éviter en faisant cela, il y a le cadre Tk bogué qui est livré avec les dernières versions d'OS X.

Par conséquent, un sous-objectif clé ici est d'installer de nouveaux frameworks Tcl et Tk, distincts de ceux fournis par le système. Ceux que je veux installer proviennent de ActiveState ("Mac OS X (10.5+, x86_64/x86)") sous la forme d'un fichier *.pkg.

Lorsque je clique sur ce fichier, on me présente la séquence habituelle d'étapes de type "assistant" ("Introduction", "Licence", etc.). À aucun moment de cette séquence, il ne m'est offert la possibilité de choisir un autre emplacement d'installation pour ces frameworks, avant que je n'arrive au choix de cliquer sur le fichier "Licence". INSTALL bouton. 1

Je soupçonne que si je clique sur ce bouton, les fichiers installés iront sous /Library/Frameworks (ou éventuellement sous /System/Library/Frameworks ), ce que j'essaie d'éviter. (En effet, lorsque je clique sur INSTALL je suis immédiatement confronté à une boîte de dialogue de saisie de mot de passe, ce qui indique assez bien que l'installation placera les fichiers quelque part sous le nom de /Library ou /System .)

Par conséquent, je cherche une autre façon d'effectuer cette installation qui me permettra de explicitement fixé le dossier de destination des fichiers installés.

<sup>1 </sup>Oui, le programme d'installation me permet de choisir un volume différent pour l'installation, mais il ne me permet pas de spécifier, par exemple, <code>$HOME/Library/Frameworks</code> comme destination des fichiers installés.

2voto

MattDMo Points 2725

Vous pouvez installer Python en toute sécurité sous /Library/Frameworks et ne pas s'inquiéter de l'interférence avec le Python "système", bien qu'avec quelques liens symétriques et/ou $PATH vous pouvez en faire la valeur par défaut si vous le souhaitez.

Comme alternative, vous pouvez installer MacPorts et définissez sa racine d'installation comme vous le souhaitez (la valeur par défaut est /opt/local je crois, bien que cela soit configurable lors de l'installation), bien que le framework Python soit toujours installé sous un nom de domaine de type Library/Frameworks sous-répertoire. Je préfère la distribution MacPorts à la distribution Python.org parce qu'il existe de nombreux modules supplémentaires que vous pouvez installer et qui sont préconfigurés pour être construits correctement, ce qui n'est pas toujours le cas lorsque vous utilisez l'option pip ou easy_install en fonction de ce que vous essayez de construire. MacPorts dispose également d'un système de gestion des versions assez décent, permettant à plusieurs versions de coexister côte à côte, avec des outils simples pour passer de l'une à l'autre. En prime, la Tcl de MacPorts n'est pas "cassée", donc tout ce que vous pouvez faire est de l'ordre de l'écriture. devrait travailler en dehors de la boîte. YMMV :)

2voto

jaume Points 13186

D'une manière générale, vous pouvez seulement relocaliser un paquet (c'est-à-dire l'installer dans un autre répertoire) qui a été construit en tenant compte de la relocalisation .

Si le paquet le supporte, il peut être relocalisé avec l'équivalent en ligne de commande de Installer.app appelé commodément installer avec option -target (de man installer ) :

Le volume cible est spécifié avec l'option -target paramètre ( -tgt est accepté comme un synonyme).

L'argument de -target est :

  1. Un point de montage de volume ( /Volumes/HDD ), nœud de dispositif ( /dev/disk0s5 ) ou l'UUID du volume ( 376C4046-083E-334F-AF08-62FAFBC4E352 ), par exemple :

    installer -pkg InstallMe.pkg -target / 
  2. N'importe laquelle des valeurs renvoyées par -dominfo ( LocalSystem ou CurrentUserHomeDirectory ), par exemple :

    installer -pkg InstallMe.pkg -target CurrentUserHomeDirectory

(Comme vous le voyez, cette dernière commande semble très prometteuse. Elle installerait InstallMe.pkg dans la hiérarchie du répertoire personnel de l'utilisateur actuel).

Dans notre cas précis, malheureusement, Le paquet Tcl d'ActiveState n'a pas été conçu pour être déplacé. :

  • Il ne renvoie aucune information pour -dominfo :

    $ installer -verbose -dominfo -pkg ActiveTcl-8.6.pkg
    Domain information:
    NoDomainsAvailable
  • Bien que le pkg peut être installé avec succès sur un autre 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.
    #

    comme on peut le voir ici :

    enter image description here

    ça ne marche pas :

    $ 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 raison est que scripts et les outils compilés utilisent et sont liés à /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 vous souhaitez utiliser Tcl d'ActiveState, vous devez installer le paquet dans son emplacement par défaut.

Et d'après ce que je sais, il n'y aura pas de conflit avec le cadre Tcl installé. :

  • Le cadre propre à OS X est installé dans /System/Library/Frameworks/Tk.framework/ certains binaires dans /usr/bin .

  • Le Tcl d'ActiveState s'installe dans /Library/Frameworks/Tcl.framework , /Library/Frameworks/Tk.framework , /Library/Tcl y /usr/local/bin (pour une liste complète, double-cliquez sur l'icône pkg et sélectionnez File>ShowFiles).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X