2010-09-28 6 views
13

J'ai essayé de compiler Python 2.7 sur Ubuntu 10.4, mais ont reçu le message d'erreur suivant après l'exécution make:paquets Ubuntu nécessaires pour compiler Python 2.7

Python build finished, but the necessary bits to build these modules were not found: 
_bsddb    bsddb185   sunaudiodev  
To find the necessary bits, look in setup.py in detect_modules() for the module's name. 

Quels paquets ai-je besoin? (setup.py n'a pas été utile)

+1

Je voudrais essayer d'aller dans Synaptic et de chercher Python et de télécharger tous les kits de développement, etc. – Scott

+2

Je pense que ce serait mieux pour unix.se, ubuntu.se, superutilisateur ou serverfault. – Chris

Répondre

6

sudo apt-get build-dep python2.6 python-gdbm python-bsddb3 (Utilisez python2.7 sur non-conformiste). Pour plus d'informations, voir this answer. Regardez également this page, ce qui s'applique également pour construire sur Lucid.

+0

Le paquet "build-dep" ne peut pas être trouvé sur mon système. – deamon

+0

C'était une erreur, je l'ai corrigé il y a un moment. –

5

Ce sont des modules plus anciens (principalement dépréciés) que vous n'utiliserez probablement pas. Vous devriez être capable d'ignorer les avertissements en toute sécurité.

Celui que vous pourriez vouloir s'inquiéter d'essayer de fixer est _bsddb, qui devrait disparaître une fois que vous installez Berkeley DB 4.8 ... Je ne suis pas sûr si c'est dans les repos d'Ubuntu ou pas. (edit: apparemment c'est le db package)

bsddb185 est une ancienne version du module Oracle Berkley Database. Vous pouvez l'ignorer en toute sécurité pour autant que je sache.

sunaudiodev est dépréciée, non documentée, je doute que vous auriez jamais besoin de l'utiliser quand même. Vous devriez pouvoir l'ignorer en toute sécurité.

qui aide l'espoir un peu, quand même ...

+2

Ma liste d'ignorés sur Linux est _tkinter, bsddb185, dl, imageop, sunaudiodev –

15

En supposant que vous avez toutes les dépendances installées (sur Ubuntu qui serait tas de choses comme sudo apt-get install libdb4.8-dev et divers autres paquets -dev, alors voilà comment je construis . Python

tar zxvf Python-2.7.1.tgz 
cd Python-2.7.1 

# 64 bit self-contained build in /opt 
export TARG=/opt/python272 
export CC="gcc -m64" 
export LDFLAGS='-Wl,-rpath,\$${ORIGIN}/../lib -Wl,-rpath-link,\$${ORIGIN}/../lib -Wl,--enable-new-dtags' 
./configure --prefix=$TARG --with-dbmliborder=bdb:gdbm --enable-shared --enable-ipv6 
make 
make install 

Les seuls modules qui ne construisent pas pendant le make sont:

_tkinter - I don't do GUI apps and would use wxWindows if I did 
bsddb185 - horribly obsolete version of bdb 
dl - deprecated in 2.6    
imageop - deprecated in 2.6 
sunaudiodev - obsolete interface to some SparcStation device I think 

Suivant Je collectionne tous les fichiers .so qui ne sont pas déjà dans les répertoires installer Python et les copier:

# collect binary libraries ##REDO THIS IF YOU ADD ANY ADDITIONAL MODULES## 
cd /opt/python272 
find . -name '*.so' | sed 's/^/ldd -v /' >elffiles 
echo "ldd -v bin/python" >>elffiles 
chmod +x elffiles 
./elffiles | sed 's/.*=> //;s/ .*//;/:$/d;s/^    *//' | sort -u | sed 's/.*/cp -L & lib/' >lddinfo 
# mkdir lib 
chmod +x lddinfo 
./lddinfo 

Et puis ajoutez setuptools pour faire bonne mesure

#set the path 
export PATH=/opt/python272/bin:$PATH 

#install setuptools 
./setuptools-0.6c11-py2.7.egg 

À ce stade, je peux faire un tarball/opt/python272 et l'exécuter sur tout 64 distro sous Linux, même une version dépouillée qui n'a aucune des dépendances installées, ou une ancienne distribution qui a d'anciennes versions obsolètes des dépendances.

Je reçois également pip installé mais à ce stade, il y a un écart dans mes notes en raison de certaines difficultés avec virtualenv. Fondamentalement, virtualenv ne supporte pas ce scénario. On peut supposer que je l'ai fait easy_install pip puis:

export LD_RUN_PATH=\$${ORIGIN}/../lib 
pip install cython 
pip install {a whole bunch of other libraries that I expect to use} 

Après que je suis fait installer des modules, je revenir en arrière et ré-exécuter les commandes pour collecter les fichiers .so et faire une nouvelle tarball. Il y avait quelques paquets où je devais tourner autour avec LDFLAGS pour les faire installer correctement, et je n'ai pas encore fait assez de tests approfondis, mais jusqu'à présent cela fonctionne et j'utilise cette version de Python pour lancer les applications de production les machines qui n'ont pas toutes les bibliothèques de support préinstallées.

+0

Un point important: le simple fait qu'un module ne puisse être trouvé lorsque vous le construisez ne signifie pas que vous en avez besoin. –

Questions connexes