Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

PyInstaller сборка проектов с cx_Oracle


(rmerkushin) #1

Всем привет!
Пытаюсь собрать с помощью PyInstaller бинарник в котором используется библиотека cx_Oracle (собираю на Mac OS).

# -*- coding: utf-8 -*-

import cx_Oracle


def oracle_test():
    connection = cx_Oracle.connect("connection_string")
    cursor = connection.cursor()
    cursor.execute("select sysdate from dual")
    d = cursor.fetchall()
    return d[0][0]


def main():
    print oracle_test()

if __name__ == "__main__":
    main()

При сборке в спеке прописал пути к либам Oracle Instant Client:

# -*- mode: python -*-
a = Analysis(['test.py'],
             pathex=['/Users/rmerkushin/Projects/oracle2xlsx'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          [('libclntsh.dylib.11.1','/usr/lib/oracle/instantclient_11_2/libclntsh.dylib.11.1','BINARY')],
          [('libocci.dylib.11.1','/usr/lib/oracle/instantclient_11_2/libocci.dylib.11.1','BINARY')],
          [('libociei.dylib','/usr/lib/oracle/instantclient_11_2/libociei.dylib','BINARY')],
          [('libnnz11.dylib','/usr/lib/oracle/instantclient_11_2/libnnz11.dylib','BINARY')],
          a.zipfiles,
          a.datas,
          name='test',
          debug=False,
          strip=None,
          upx=True,
          console=True )

При запуске выдает это: cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
Кто нибудь сталкивался с подобными проблемами?


(Dmitriy Zverev) #2

Выставлен ли ORACLE_PATH?


(rmerkushin) #3

Да, прописаны в .bash_profile:

export ORACLE_HOME=/usr/lib/oracle/instantclient_11_2
export LD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$ORACLE_HOME

Но по идее они не должны быть нужны, т.к. я сами либы Instant Client’а вклеиваю в бинарник. Разве что как то внутрях самого бинарника нужно указать где оно лежит, но это я не знаю как сделать :smile: