2015-10-19 32 views
10

Otrzymuję następujący błąd podczas importowania ctypes, ale tylko w moim środowisku wirtualnym (Python 3.4).Python ctypes błąd importu w virtualenv

>>> import ctypes 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.4/ctypes/__init__.py", line 7, in <module> 
    from _ctypes import Union, Structure, Array 
    ImportError: /home/user/Code/Python/venvs/main/lib/python3.4/lib-dynload/_ctypes.cpython-34m-x86_64-linux-gnu.so: undefined symbol: _PyTraceback_Add 

pip freeze z virtualenv:

beautifulsoup4==4.4.0 
blessings==1.6 
Django==1.8.4 
image==1.4.1 
Pillow==2.9.0 
wheel==0.24.0 

Jak mogę rozwiązać ten problem? Działa na głównym interpretera języka Python 3.4 ...

+4

W 3.4.3 stary "_typhost_add_traceback" został przeniesiony do wewnętrznego API, '_PyTraceback_Add' (patrz [numer 22462] (http://bugs.python.org/issue22462)). Wygląda na to, że w jakiś sposób używasz wersji 3.4.3+ z rozszerzeniem "_ctypes" ze starszą wersją Pythona 3.4. – eryksun

+0

Wielkie dzięki, @eryksun! Teraz działa :) – David

Odpowiedz

9

Jako numer eryksun described, wydaje się, że problem związany jest z known bug w wersji 3.4 * wersji Pythona. Udało mi się go rozwiązać w Ubuntu 14.04 przez uaktualnienie do Python 3.5 następujący this answer:

sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:fkrull/deadsnakes 
sudo apt-get update 
sudo apt-get install python3.5 python3.5-dev python3.5-venv 
# create a python3.5 virtualenv 
python3.5 -m venv venv 
. ./venv/bin/activate 
python -c 'import ctypes' # throws no errors as opposed to before 

Prawidłowe rozwiązanie, w którym nie zależy na 3rd KDT partii byłoby uaktualnić do wersji OS z nowszej wersji Pythona:)

4

Spróbuj zniszczyć i odtworzyć swoje wirtualne środowisko. W moim przypadku stworzyłem środowisko wirtualne przed instalacją zależności/niewielkich ulepszeń i chociaż wirtualny env miał dowiązania symboliczne do nowszych plików, użyto kopii starszego interpretatora mniejszych wersji.