I have some code that connects to Oracle via cx_Oracle + SQL Alchemy.
This code works fine under unittest and in actual use. It fails when under
pytest.
The actual error message I get is:
````
sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: Cannot
locate a 64-bit Oracle Client library:
"dlopen(/Users/jluc/bin/oracle/instantclient_12_1/lib/libclntsh.dylib, 1)
````
OK, the funny thing is that libclntsh.dylib does exist:
````
$ which libclntsh.dylib
/Users/jluc/bin/oracle/instantclient_12_1/libclntsh.dylib
````
But notice that it's under instantclient_12_1, not instantclient_12_1/lib
as in the error message.
There is NO /lib/ subdirectory under instantclient_12_1 which is where
SQLAlchemy wants it, but only when running under pytest (works fine
everywhere else).
My workaround? created a lib subdirectory and copied everything from above
it:
mkdir lib
cd lib
cp ../* .
````
/Users/jluc/bin/oracle/instantclient_12_1
├── help
│ ├── ja
│ │ ├── META-INF
│ │ ├── img
│ │ └── img_text
│ └── us
│ ├── META-INF
│ ├── img
│ └── img_text
├── lib 👈 added this, then cp ../* .
└── sdk
├── admin
├── demo
└── include
14 directories
````
It works, but I have no idea why I had to do this. I tried symlinking
first but it kept on complaining about other missing libs so I gave in and
copied instead.
versions:
macos Mojave,
cx-Oracle 8.0.1
pytest 6.1.2
pytest-cov 2.10.1
SQLAlchemy 1.3.18
Python 3.8.6
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/9f994858-f5a3-4c61-b7b3-ae901c9e19cdn%40googlegroups.com.