Не удается заставить cx_Oracle работать с Python версии 2.7 / Mac OS 10.7.2 (Lion) - missing_OCIAttrGet - PullRequest
6 голосов
/ 17 ноября 2011

Не удается заставить cx_Oracle работать с Python версии 2.7 / mac os 10.7.2 (Lion)

Еще одна вещь: я установил оракул 32 бит, не уверен, что это было правильно.

 Traceback (most recent call last):
      File "reader.py", line 9, in <module>
        import cx_Oracle
      File "build/bdist.macosx-10.7-intel/egg/cx_Oracle.py", line 7, in <module>
      File "build/bdist.macosx-10.7-intel/egg/cx_Oracle.py", line 6, in __bootstrap__
    ImportError: dlopen(/Users/me/.python-eggs/cx_Oracle-5.1.1-py2.7-macosx-10.7-intel.egg-tmp/cx_Oracle.so, 2): Symbol not found: _OCIAttrGet
      Referenced from: /Users/me/.python-eggs/cx_Oracle-5.1.1-py2.7-macosx-10.7-intel.egg-tmp/cx_Oracle.so
      Expected in: flat namespace
     in /Users/me/.python-eggs/cx_Oracle-5.1.1-py2.7-macosx-10.7-intel.egg-tmp/cx_Oracle.so

Кажется, что их ключевой проблемой является невозможность найти _OCIAttGet, и я думаю, это означает, что он не может найти файл lib или что-то в этом роде.

Нашел в сети, кто-то говорит о DYLD_LIBRARY_PATH, но мой установлен, однако он упомянул об этом в файле cxoracle.cfg, что я не могу найти, это моя проблема?

EDIT

После попытки запустить его с 32-битным режимом Python я вижу другую ошибку.

 Traceback (most recent call last):
   File "reader.py", line 9, in <module>
     import cx_Oracle
   File "build/bdist.macosx-10.7-intel/egg/cx_Oracle.py", line 7, in <module>
   File "build/bdist.macosx-10.7-intel/egg/cx_Oracle.py", line 3, in __bootstrap__
 ImportError: No module named pkg_resources
  • Я не мог запустить 64-битные версии oracle на моем компьютере, продолжал получать ошибки сегментации, когда я запускал sqlplus, поэтому я использую 32.

ВТОРОЕ РЕДАКТИРОВАНИЕ

На самом деле, независимо от того, что я устанавливаю, это не та версия .. 32-битная версия

 ld: warning: ignoring file /opt/oracle/instantclient10_2/libclntsh.dylib, file was built for unsupported file format which is not the architecture being linked (i386)

64-битная версия:

 ld: warning: ignoring file /opt/oracle/instantclient10_2/libclntsh.dylib, file was built for unsupported file format which is not the architecture being linked (x86_64)

Я собираюсь попробовать 11g, но у него есть только 64-битная версия.

Ответы [ 5 ]

6 голосов
/ 04 января 2013

К скомпилируйте cx_Oracle, чтобы он работал на OS X необходимо настроить несколько параметров.Важные биты:

  1. Создайте virtualenv с интерпретатором Python, выделенным только для 32-битного.В каталоге bin Virtualenv ($WORKON_HOME/*name_of_virtualenv*/bin):

    % mv python python.fat
    % lipo python.fat -remove x86_64 -output python
    
  2. Несмотря на то, что Python теперь тонкий, его конфигурация не такова, поэтому нам нужно форсировать вещи, используя непонятную переменную окружения, которая будет distutilsзабрать:

    ARCHFLAGS="-arch i386" pip install cx_Oracle
    
2 голосов
/ 06 апреля 2014

Шаги для установки на клиент oracle на Mac ox 10.8.5 для подключения oracle от python.(Существует ошибка, из-за которой 64-разрядная версия не работает для Mac ox 10.8.5)

  1. Перейти к http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
  2. Загрузить InstantClient-Basic-Macos.x32-11.2.0.3.0.zip
  3. Download instantclient-sdk-macos.x32-11.2.0.3.0.zip
  4. Создать новую папку в папке / Users / <ваше имя пользователя> / ora_32 (вы можетеНазовите то, что вы хотите)
  5. Переместите zip-файлы instantclient-sdk-macos.x32-11.2.0.3.0.zip и instantclient-basic-macos.x32-11.2.0.3.0.zip в/ Users / <ваше имя пользователя> / ora_32 Команда ниже

    mv insta*32* /Users/< your username>/ora_32/
    
  6. Разархивируйте instantclient-basic-macos.x32-11.2.0.3.0.zip и instantclient-sdk-macos.x32-11.2.0.3.0.zip Команда ниже

    cd /Users/< your username>/ora_32/
    unzip instantclient-basic-macos.x32-11.2.0.3.0.zip
    unzip instantclient-sdk-macos.x32-11.2.0.3.0.zip
    
  7. создаст папку instantclient_11_2 в папке / Users // ora_32 /
  8. cd для / Users / <ваше имя пользователя> / ora_32 / instantclient_11_2 и создайте ниже символическую ссылку, которая будет использоваться при установке cx_Oracle. (Упомянуто ниже)

    ln -s libclntsh.dylib.11.1 libclntsh.dylib
    ln -s libocci.dylib.11.1 libocci.dylib
    
  9. Экспорт переменных среды для текущей сессииИон или вы можете добавить их в профиле bash для вызова каждый раз, когда вы открываете новый терминал.

    export ORACLE_HOME=/Users/<your username>/ora_32/instantclient_11_2
    export LD_LIBRARY_PATH=$ORACLE_HOME
    export DYLD_LIBRARY_PATH=$ORACLE_HOME
    export VERSIONER_PYTHON_PREFER_32_BIT=yes
    export PATH=$PATH:/Users/<your username>/ora_32/instantclient_11_2
    
  10. Загрузите cx_Oracle (только исходный код опции) по ссылке http://cx -oracle.sourceforge.net
  11. Разархивируйте tar-файл cx_Oracle, и он создаст папку cx_Oracle-5.1.2 cd в эту папку cx_Oracle-5.1.2
  12. Запустите нижеКоманда установит cx_Oracle, а затем

     sudo easy_install cx_Oracle
    
  13. . Вы можете проверить, зайдя в приглашение Python и набрав import cx_Oracle
2 голосов
/ 10 декабря 2011

Не уверен, если у вас все еще есть проблемы с этим, но вот как я заставил это работать.

Я следовал инструкциям, перечисленным здесь (используя 32-битные загрузки из Oracle): http://www.xairon.net/2011/05/guide-installing-cx_oracle-on-mac-os-x/

У меня была та же самая ошибка, которую вы перечислили:

ImportError: dlopen (/Library/Python/2.7/site-packages/cx_Oracle.so, 2): символ не найден: _OCIAttrGet Ссылка на: /Library/Python/2.7/site-packages/cx_Oracle.so Ожидается в: плоском пространстве имен в /Library/Python/2.7/site-packages/cx_Oracle.so

Проблемабыл из дистрибутива Apple Python, работающего в 64-битном режиме по умолчанию.

Как только я заставил Apple, поставляемый Python, использовать 32-битный (по рекомендации Неда), он заработал!

Для этого:

$ export VERSIONER_PYTHON_PREFER_32_BIT = Да

Чтобы сделать его постоянным:

$ по умолчанию напишите com.apple.versioner.python Prefer-32-битный -бул да

2 голосов
/ 17 ноября 2011

Если вы используете поставляемый Apple Python 2.7, он предпочтет работать в 64-битном режиме, и это будет проблемой, если вы установили только 32-битные библиотеки Oracle. Вы можете попытаться заставить этот Python работать в 32-битном режиме, запустив его так:

arch -i386 python2.7

Если вы всегда осторожно запускаете python через /usr/bin/python, вы также можете использовать любой из методов, описанных на странице man Apple для Python, то есть установить переменную окружения VERSIONER_PYTHON_PREFER_32_BIT или установить постоянное значение по умолчанию через defaults.

0 голосов
/ 04 июня 2013

У меня была такая же проблема.Я использую Mac OS X 10.8.3.

После 4 часов попыток различных решений я наконец понял, что это было результатом установки 32-разрядной версии Oracle InstantClient, которая конфликтовала с 64-битная версия python.

Чтобы решить: я удалил python (и некоторые зависимости), затем переустановил универсальную версию.Я следовал инструкциям в этом посте, чтобы убрать x86_64 из двоичного файла python в моем virtualenv.Это позволило 32-разрядному Oracle InstantClient работать с 32-разрядным двоичным файлом Python.

Я не решаюсь использовать 64-разрядный Oracle InstantClient из-за некоторых других сообщений, которые я видел при исследовании этой проблемы.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...