2012-11-27 14 views
9

Używanie Pythona 2.7.3 z Numpy 1.6.2 na 64-bitowym Ubuntu 12.04. Dodatkowe wersje są obecne w systemie (Python 2.6.4 i Numpy 1.6.1), ale według mojej najlepszej wiedzy nie mają one wpływu na zdarzenia opisane poniżej.Numpy kończy się niepowodzeniem z python-dbg (niezdefiniowany symbol: Py_InitModule4_64)

Pracuję nad programem Python, który używa Numpy, i otrzymuję błąd, gdy próbuję uruchomić określone polecenie z programu. Postanowiłem więc zainstalować python2.7-dbg, aby uruchomić program i sprawdzić, czy to pomoże w debugowaniu. Więc biegnę

$ python-dbg <command> 

zamiast

$ python <command> 

Jednak daje to "niezdefiniowany symbol: Py_InitModule4_64" błąd związany z NumPy. Nie ma znaczenia, co dokładnie próbuję uruchomić; błąd występuje również w przypadku poleceń, które się powiodą, jeśli działają z "zwykłym" pythonem. Występuje nawet jeśli próbuję zaimportować numpy w pustym wierszu python-dbg:

$ python-dbg 
Python 2.7.3 (default, Aug 1 2012, 04:55:00) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module> 
    import add_newdocs 
    File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module> 
    from numpy.lib import add_newdoc 
    File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 4, in <module> 
    from type_check import * 
    File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 8, in <module> 
    import numpy.core.numeric as _nx 
    File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 5, in <module> 
    import multiarray 
ImportError: /usr/local/lib/python2.7/dist-packages/numpy/core/multiarray.so: undefined symbol: Py_InitModule4_64 
[134187 refs] 
>>> 

Importowanie numpy powiedzie się, gdy w czystej wierszu Pythona.

Nie miałem szczęścia znajdowania informacji w Internecie. Najbardziej zbliżony do mojego błędu jest this bug on debian, który jest dokładnie taki sam, ale został zamknięty przed dostarczeniem jakichkolwiek dalszych informacji. Zainstalowałem zarówno pakiety python-numpy-dbg, jak i python-apt-dbg z APT; Mam dostęp sudo do maszyny, więc zmiany, które wprowadzam, są ważne dla całego systemu. O ile mi wiadomo, nie ustawiono opcji chroot dla żadnego z procesów, które próbuję uruchomić, więc strona błędu Debiana nic mi nie pomoże.

Każda pomoc zostanie bardzo doceniona.

+0

Możesz chcieć sprawdzić zmienną środowiskową '$ PYTHONPATH'. Wystarczy spojrzeć na pakiet python-numpy-dbg dla Ubuntu, który nie powinien być importowany z/usr/local/lib. Dziwnie to wygląda. – Iguananaut

+0

Albo, co ważniejsze, nawet jeśli nie ma niczego na '$ PYTHONPATH', wygląda na to, że zainstalowałeś własną kopię Numpy (może używając pip lub easy_install) i zastępuje ona Numpy instalowaną przez apt. – Iguananaut

+0

Dzięki, myślę, że postawiłeś mnie na właściwej drodze. Poprzednia wersja numpy (1.6.1), która była obecna w systemie od momentu, kiedy dołączyłem do projektu, znajduje się w /usr/lib/python2.7/dist-packages, a ta, którą zainstalowałem (1.6.2) za pośrednictwem pip zostały umieszczone w /usr/local/lib/python2.7/dist-packages. Nie sądziłem, że to ma znaczenie, ale teraz, gdy sprawdziłem sys.path, nie było numpy. Teraz spróbuję dodać nową numpy do ścieżki lub powrócić do starej. – Boris

Odpowiedz

2

Jak potwierdzono w PO, wskazówką tutaj jest traceback, który pokazuje, że importowany jest numpy w /usr/local/lib/. Jednak pakiety zainstalowane przez program apt to /usr/lib/pythonX.Y, gdzie jako pakiety inne niż Ubuntu z zainstalowanymi pip, easy_install itd. Są instalowane pod /usr/local/lib/pythonX.Y i zastępują pakiety systemowe.

Na razie powinieneś odinstalować Numpy, którą zainstalowałeś pod numerem /usr/local/lib/python2.7/dist-packages, aby ten zainstalowany przez Pythona-numpy działał. W przyszłości będziesz mógł mieć zainstalowane i zrobić coś z usercustomize.py, aby przełączać się między nimi, ale nie jestem teraz na komputerze Ubuntu, więc nie mam możliwości przetestowania tego.

+0

Wielkie dzięki! Obawiałem się, że zajmie to kilka godzin, a nawet dni, zanim ktoś odpowie, ale odpowiedziałeś wystarczająco szybko, bym rozwiązał to szybko i ruszyłem dalej :) – Boris

+4

Naprawdę mówisz, że skompilowane rozszerzenia Pythona instalowane przez pip lub easy_install (standard dla modułów Pythona) nie działa z python-dbg? To brzmi jak poważny błąd dla mnie. – papercrane

+1

Jedną z przyczyn tego błędu może być również uruchamianie z pakietami site (z virtualenv) dla innej wersji pythona (tzn. Wersji innej niż dbg). Aby naprawić setup, należy wskazać nowy virtualenv wskazujący na odpowiedni plik binarny Pythona i załadować pakiety z pliku wymagań. –

Powiązane problemy