I am running oracle linux 7.9 with python 3.6.8. I created a standalone python zipapp executable following this tutorial. When I run the resulting executable I get the following error(1m is just an argument that script expects)
oracle@hostname:~/scripts/inspirit/ora_runner2> python3 standalone_ora_runner_native.pyz 1m
Traceback (most recent call last):
File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "standalone_ora_runner_native.pyz/__main__.py", line 71, in <module>
File "standalone_ora_runner_native.pyz/oracledb/__init__.py", line 56, in <module>
File "standalone_ora_runner_native.pyz/oracledb/connection.py", line 45, in <module>
ImportError: cannot import name 'base_impl'
base_impl is a module that oracledb library tries to import but fails. Contents of oracledb folder are like following
oracle@hostname:~/scripts/inspire/ora_runner2/standalone_testing/oracledb> ll
total 28588
-rw-r--r-- 1 oracle oinstall 19013 Nov 9 13:32 aq.py
-rwxr-xr-x 1 oracle oinstall 8927248 Nov 9 13:32 base_impl.cpython-36m-x86_64-linux-gnu.so
-rw-r--r-- 1 oracle oinstall 49764 Nov 9 13:32 connection.py
-rw-r--r-- 1 oracle oinstall 32021 Nov 9 13:32 connect_params.py
-rw-r--r-- 1 oracle oinstall 4001 Nov 9 13:32 constants.py
-rw-r--r-- 1 oracle oinstall 2909 Nov 9 13:32 constructors.py
-rw-r--r-- 1 oracle oinstall 35714 Nov 9 13:32 cursor.py
-rw-r--r-- 1 oracle oinstall 11852 Nov 9 13:32 dbobject.py
-rw-r--r-- 1 oracle oinstall 1827 Nov 9 13:32 defaults.py
-rw-r--r-- 1 oracle oinstall 5403 Nov 9 13:32 driver_mode.py
-rw-r--r-- 1 oracle oinstall 3130 Nov 9 13:32 dsn.py
-rw-r--r-- 1 oracle oinstall 22861 Nov 9 13:32 errors.py
-rw-r--r-- 1 oracle oinstall 1811 Nov 9 13:32 exceptions.py
-rw-r--r-- 1 oracle oinstall 5679 Nov 9 13:32 fetch_info.py
-rw-r--r-- 1 oracle oinstall 1995 Nov 9 13:32 future.py
-rw-r--r-- 1 oracle oinstall 6172 Nov 9 13:32 __init__.py
-rw-r--r-- 1 oracle oinstall 6078 Nov 9 13:32 lob.py
-rw-r--r-- 1 oracle oinstall 31742 Nov 9 13:32 pool_params.py
-rw-r--r-- 1 oracle oinstall 35264 Nov 9 13:32 pool.py
drwxr-xr-x 2 oracle oinstall 4096 Nov 9 13:32 __pycache__
-rw-r--r-- 1 oracle oinstall 0 Nov 9 13:32 py.typed
-rw-r--r-- 1 oracle oinstall 28158 Nov 9 13:32 soda.py
-rw-r--r-- 1 oracle oinstall 11078 Nov 9 13:32 subscr.py
-rwxr-xr-x 1 oracle oinstall 5944536 Nov 9 13:32 thick_impl.cpython-36m-x86_64-linux-gnu.so
-rwxr-xr-x 1 oracle oinstall 14027328 Nov 9 13:32 thin_impl.cpython-36m-x86_64-linux-gnu.so
-rw-r--r-- 1 oracle oinstall 3382 Nov 9 13:32 utils.py
-rw-r--r-- 1 oracle oinstall 6629 Nov 9 13:32 var.py
-rw-r--r-- 1 oracle oinstall 1533 Nov 9 13:32 version.py
How I prepared the zipapp
- python -m pip install -r requirements.txt --target ora_runner/
- python -m zipapp ora_runner/ -o standalone_ora_runner_native.pyz -p "python"
Problem in this post is the same with mine under similar conditions and someone in the comments suggested that it is about the system not being able to run cpython due to missing redistributable packages and such. I would appreciate if someone would be able to elaborate on that, because i think that might be the problem.
Thanks in advance!
Taking a quick look at zipapp, I see that it assumes a pure Python application. The oracledb package contains extension modules (one of those is base_impl) and these cannot be loaded from inside a zip file. You will need to exclude oracledb from the your zipapp package and have that installed separately.