2016-07-14 3 views
1

Я видел похожие вопросы, но ни один из них не дал ответов на мою проблему. Я недавно обновлен до v3.5 питона с помощью MacPorts на Mac OS X. Установка пакетов питона отлично работает, если есть действительный Macport:Ошибка при установке пакетов python, которые требуют .so-файлов после обновления до macports python 3.5

sudo port install py35-numpy 

Однако, если я пытаюсь установить питон пакеты, которые требуют .so файлов с помощью PIP3 , Я получаю ошибки. Например, нет порта pystan. Во-первых, установить пип

sudo port install py35-pip 

Затем я использую пип установить pystan в мой каталог Python 3.5

sudo pip3 install --target=/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/ pystan 

Installing collected packages: Cython, numpy, pystan 
Successfully installed Cython-0.24 numpy-1.11.1 pystan-2.9.0.0 

Не то, что он на самом деле не установить Cython или NumPy, потому что они уже были там. Но тогда, когда я пытаюсь запустить pystan:

Nate$ ipython 
Python 3.5.2 (default, Jun 27 2016, 03:10:38) 
Type "copyright", "credits" or "license" for more information. 

IPython 5.0.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: import pystan 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-7b354c723dbb> in <module>() 
----> 1 import pystan 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pystan/__init__.py in <module>() 
     7 import logging 
     8 
----> 9 from pystan.api import stanc, stan 
    10 from pystan.misc import read_rdump, stan_rdump 
    11 from pystan.model import StanModel 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pystan/api.py in <module>() 
    10 import hashlib 
    11 
---> 12 import pystan._api # stanc wrapper 
    13 from pystan._compat import string_types 
    14 from pystan.model import StanModel 

ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pystan/_api.so, 2): Symbol not found: _PyBaseString_Type 
    Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pystan/_api.so 
    Expected in: flat namespace 
in /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pystan/_api.so 

Я видел ту же ошибку, когда я попытался установить NumPy через пип, и тот же один с netCDF4.

In [2]: import netCDF4 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-2-f731da2de255> in <module>() 
----> 1 import netCDF4 

/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/netCDF4/__init__.py in <module>() 
     1 # init for netCDF4. package 
     2 # Docstring comes from extension module _netCDF4. 
----> 3 from ._netCDF4 import * 
     4 # Need explicit imports for names beginning with underscores 
     5 from ._netCDF4 import __doc__, __pdoc__ 

ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/netCDF4/_netCDF4.so, 2): Symbol not found: _PyCObject_Type 
    Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/netCDF4/_netCDF4.so 
    Expected in: flat namespace 
in /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/netCDF4/_netCDF4.so 

Что случилось с файлами .so? Или, если на то пошло, мой компьютер?

+0

Вы пробовали вызывать 'pip3 install' без опции' --target'? Я ожидал, что до тех пор, пока вы используете 'pip3', установленный MacPorts, он будет устанавливать вещи в нужном месте. Интересно, работает ли с помощью '--target' какие-то неожиданные подкаталоги или что-то в этом роде. – jb326

+0

@ jb326, вы, вероятно, правы. См. Ответ ниже. – Nate

ответ

2

Вы уверены, что pip3 принадлежит к версии pip, установленной MacPorts, желательно pip-3.5? Я предполагаю, что вы используете pip с другой установкой Python, поэтому свяжете C-расширения с неправильной библиотекой Python и принудительно установите в каталог пакетов Python3.5 из MacPorts.

Чтобы исправить, используйте вместо этого pip-3.5 (а затем вы также можете отказаться от опции --target).

EDIT: или выполните sudo port select --set pip pip35, а затем используйте только pip.

EDIT: Я только что проверил, и действительно (текущие) версии MacPorts pip не предоставляют команду pip3, поэтому это явно относится к другой версии Python. Сделайте which -a pip3, чтобы узнать, какой из них.

+0

Спасибо! Возможно, это сработало бы. Я действительно понял, что пип использовал версию рамочной программы Python 2.7 (поэтому у меня было --target для установки на Python 3.5), но я не знал, что это вызовет проблемы. К сожалению (или, к счастью), я уже решил проблему с более экстремальным решением: полностью стереть и восстановить свой компьютер на старую версию, где все работает, установить Anaconda и удалить все версии macports python. Я расстроился и просто сокрушил все. Теперь это работает. – Nate