2009-11-14 3 views
2

Dans ubuntu 9.10, dans usr/lib/il y a les répertoires python2.4, python2.5, python2.6 et python3.0ubuntu9.10: comment utiliser les répertoires lib-dynload et site-packages de python?

Seulement python 2.6 fonctionne vraiment.
python2.4 ne dispose que d'un répertoire lib-dynload,
python2.5 a seulement lib-dynload et site-packages,
python3.0 ne dispose que d'un répertoire dist-packages.

Maintenant, je me demande quelle est l'idée derrière cela? Parce que quand j'installe python2.5 avec ./configure, make, make install | altinstall cela va dans usr/local/lib et non usr/lib/alors pourquoi ces répertoires ont-ils été ajoutés à ubuntu, comment suis-je supposé installer python pour les utiliser?

Répondre

2

j3ll3, en vous pouvez poser la question "Quel paquet fournit XYZ" en tapant

dpkg -S /path/to/XYZ 

Ainsi, par exemple, dans Ubuntu 9.10,

Ubuntu (ou tout autre Linux à base DPKG OS)
dpkg -S /usr/lib/python2.5/lib-dynload/gdbm.so 

retours

python-gdbm: /usr/lib/python2.5/lib-dynload/gdbm.so 

Vous pouvez en savoir plus ab le paquet python-gdbm en tapant

apt-cache show python-gdbm 

qui dit que gdbm-python fournit "support de base de données GNU dbm pour Python". Peut-être plus intéressant, si vous tapez

dpkg --listfiles python-gdbm 

vous pouvez voir une liste de tous les fichiers qui installe python-gdbm:

... 
/usr/lib/python2.4 
/usr/lib/python2.4/lib-dynload 
/usr/lib/python2.4/lib-dynload/gdbm.so 
/usr/lib/python2.5 
/usr/lib/python2.5/lib-dynload 
/usr/lib/python2.5/lib-dynload/gdbm.so 
/usr/lib/python2.6 
/usr/lib/python2.6/lib-dynload 
/usr/lib/python2.6/lib-dynload/gdbm.so 
... 

Il semble donc que ce paquet unique installe 3 .donc bibliothèques , un pour chaque version de python. Python2.6 est la version par défaut de Python dans Ubuntu 9.10, mais il est également possible d'installer python2.4, 2.5 et/ou 3.0.À moins que vous le fassiez, seul /usr/lib/python2.6/lib-dynload/gdbm.so est utilisé, les autres ne font que gaspiller de l'espace. Comme les fichiers inutiles dans python2.4, 2.5, 3.0 ne sont pas très volumineux, le responsable du paquet a probablement estimé qu'il était plus facile d'expédier un paquet plutôt qu'un pour chaque version de python.

Cependant, à moins que vous savez comment corriger les erreurs futures apt-get, je vous recommande de ne pas supprimer manuellement les fichiers qui ont été installés par les paquets dans Ubuntu.

+0

Salut ~ unutbu, cela répond à la première partie de ma question en expliquant d'où viennent ces fichiers. Impressionnant! – Dan1ell

+0

Steve steveha répond à la deuxième partie de ma question. Merci à vous deux. – Dan1ell

+0

Super! Heureux d'avoir pu aider. – unutbu

0

On dirait qu'il s'agit d'un accident provenant de certains paquets que vous avez installés.

La version Python utilisée détermine les emplacements recherchés pour trouver les paquets/modules Python installés, et la "version du système" de Python dans Ubuntu 9.10 est 2.6, donc c'est ce que pratiquement tout devrait utiliser. Si vous installez le paquetage python2.5 (ou s'il est installé en dépendance de quelque chose d'autre), il utilisera /usr/lib/python2.5/*. Essayez d'exécuter which python et python --version; également which python2.6 et which python2.5. D'après ce que je comprends, bien que je ne sache pas exactement pourquoi, Debian (dont Ubuntu est dérivé) utilise un schéma de nommage dist-packages au lieu de site-packages.

Terminologie: Python a des paquets et Debian (et donc Ubuntu) a des paquets. Ils ne sont pas du même type, mais des paquets Debian individuels vont installer des paquets Python spécifiques.

+0

Bonjour Roger, Merci d'avoir pris le temps. "Cela ressemble à un accident de certains paquets que vous avez installés." Ces paquets étaient déjà là sur une nouvelle installation d'ubuntu 9.10 donc avant d'ajouter des paquets supplémentaires. Ils sont venus avec ubuntu. – Dan1ell

0

La réponse courte à votre question: lorsque vous installez des paquets de la source, vous devez utiliser le programme d'installation setup.py des paquets pour les installer automatiquement et correctement. Ce programme d'installation sait déjà où installer correctement les modules afin que Python puisse les trouver. Pour l'utiliser, appelez simplement avec l'interpréteur Python exact avec lequel vous voulez utiliser le paquet. Un cours intensif en setup.py. D'abord, exécutez-le avec l'exécutable Python exact auquel vous voulez que le paquet soit disponible. Si vous souhaitez utiliser le package avec /usr/bin/python2.5, vous devez utiliser /usr/bin/python2.5 pour exécuter setup.py. Ensuite, allez dans le répertoire où le paquet setup.py est installé. Troisièmement, vous devez installer en tant que root, il est donc plus facile de faire tout le tihng en tant que root. Quatrièmement, si vous voulez installer plusieurs interpréteurs Python, vous devez exécuter setup.py avec chacun d'eux, mais vous devez le nettoyer entre les deux. Alors, voici ce que je ferais:

% cd /root/directory/of/untarred/source/package 
% sudo su 
# /path/to/first/python setup.py build install 
# rm -rf build 
# /path/to/second/python setup.py build install 
# rm -rf build 
# exit 
% 

Si vous installez des modules à la main ... vous ne devriez pas, vous devez utiliser son setup.py. (Si vous avez écrit un nouveau module, vous devriez écrire un setup.py pour cela.) Si vous devez installer manuellement, vous devrez déterminer quel est le bon répertoire à installer pour chaque Python, soit par exploration et expérimentation ou en appelant les mêmes bibliothèques que le programme d'installation appelle pour déterminer le répertoire approprié. Les installateurs utilisant distutils appellent distutils.sysconfig.get_python_lib(); les installateurs utilisant setup_tools regardent setup_tools.command.easy_install.easy_install.INSTALL_SCHEMES[os.name]["install_dir"].

En ce qui concerne dist-packages: J'ai eu une conversation avec le mainteneur du paquet Python pour Debian plus tôt cette année. Il avait implémenté ce dist-packages dans les paquets bêta récupérés par Ubuntu 9.04, mais le code avait un bug par rapport à PYTHONUSERBASE sur lequel j'ai trébuché. Nous avons fini par parler un peu. IIRC la raison de dist-packages avait quelque chose à voir avec forcer l'utilisateur à installer des paquets dans un répertoire différent de apt-get. Cependant, je ne comprends pas vraiment la motivation, car, en pratique, l'utilisateur et apt-get s'installent toujours dans le même répertoire.

lib-dynload n'est pas une chose Debian; c'est un répertoire que Python installe lui-même. Je crois que c'était un répertoire juste pour les bibliothèques partagées implémentant des modules. Je ne suis pas sûr que Python l'utilise encore. Enfin, je ne sais pas ce que vous voulez dire par "seul python2.6 fonctionne réellement". Qu'en est-il de ces répertoires nommés différemment "ne fonctionne pas"?

+0

Merci pour l'explication Harry, Mais je demandais à propos de l'installation de python lui-même. Il s'avère que lorsque vous construisez à partir de la source, il va dans/usr/local/lib/par défaut et lors de l'installation avec apt-get install il va dans/usr/lib/et utilise les fichiers déjà présents. J'apprécie votre exemple de nettoyage après moi après avoir construit d'autres paquets, c'est une habitude que je vais commencer à former. – Dan1ell

+0

Je veux voir l'explication de Harry. – Russ

0

Je ne suis pas sûr de ce que vous entendez par "Seul python 2.6 fonctionne réellement." Supposons que vous exécutiez "l'émulateur de terminal" et obteniez une invite de ligne de commande. Est-ce cela que vous voulez dire:

% python -V 
Python 2.6 

En d'autres termes, lorsque vous exécutez Python, vous obtenez la version 2.6?Eh bien, avez-vous essayé ceci:

% python2.4 

Si Python 2.4 est correctement installé sur votre système, il fonctionnera. De même, python2.5 exécutera Python 2.5. Si cela ne fonctionne pas, et c'est ce que vous vouliez dire par "Seul Python 2.6 fonctionne réellement", alors une chose à faire est de s'assurer que vous avez bien installé des paquets Ubuntu pour Python 2.4 et Python 2.5. .

% sudo apt-get install python2.4 python2.5 

Si vous ne les avez pas déjà installés, vous devez les ajouter. Ma pensée est que vous pourriez avoir différentes bibliothèques pour supporter les anciennes versions de Python, mais vous n'avez tout simplement pas les paquets Ubuntu réels pour ces anciennes versions.

+0

salut steveha, Merci pour la réponse. Oui votre explication est ce que je voulais dire par "travailler" et "sudo apt-get install python2.4 python2.5 " a obtenu les deux versions de python installées dans/usr/lib/et a mis les liens symboliques corrects dans/usr/bin /. Donc maintenant je peux utiliser python2.4 et python2.5 pour démarrer les interpréteurs et exécuter les fichiers .py. – Dan1ell

+0

Donc ceci a répondu à la deuxième partie de ma question, en expliquant comment installer python dans/usr/lib /. Merci! – Dan1ell

Questions connexes