eickr opened a new issue, #43538:
URL: https://github.com/apache/arrow/issues/43538

   ### Describe the bug, including details regarding any error messages, 
version, and platform.
   
   ### Description of the Issue
   If a Python application includes PyArrow as a dependency then the 
application becomes incompatible with StaticX. StaticX fails, due to PyArrow 
using RUNPATH tags. Snippet of the error:
   ```
   One or more libraries included in the PyInstaller archive uses unsupported 
RPATH/RUNPATH tags:
   [truncated]
   See https://github.com/JonathonReinhart/staticx/issues/188
   ```
   That StaticX issue above directs to their more formal support documentation 
page: https://staticx.readthedocs.io/en/latest/rpath.html
   
   ### Why not remove StaticX?
   To build and distribute relatively portable executable python applications, 
one of the more common and successful methods is to use PyInstaller to create 
an executable and then, for Linux targets, use StaticX to bundle the dynamic 
executable with their library dependencies so they can be run "anywhere" just 
like a static executable.
   
   ### Context Information
   - As we only use StaticX for Linux targets, so far we have only tested and 
confirmed this issue with pyarrow Linux packages and the following:
   - Version of Python: 3.11
   - Platform: Ubuntu 20.04.6 LTS
   - Version of PyInstaller: 6.9.0 (Latest)
   - Version of StaticX: 0.14.1 (Latest)
   - Version of PyArrow: 17.0.0 (Latest); 13.0.0; We presume the in-between 
versions are also affected.
   - Version of PyArrow Without Error: 12.0.1; 11.0.0; We didn't test anything 
lower.
   
   ### Minimal Example
   ```
   import pyarrow
   
   if __name__ == '__main__':
       print("simple test")
   ```
   On a Linux machine install the "pyinstaller", "staticx", and "pyarrow" 
packages in your virtual environment. Then build the script with PyInstaller 
(E.g.: pyinstaller simple.py --name simple --onefile). Then attempt to use 
StaticX to bundle the executable (E.g.: staticx dist/simple dist/simplex). 
StaticX will fail with the following error:
   
   ### Full Error Message
   ```
   staticx: Unsupported PyInstaller input
   
   One or more libraries included in the PyInstaller archive uses unsupported 
RPATH/RUNPATH tags:
   
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_acero.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_azurefs.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_compute.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_csv.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_dataset.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_dataset_orc.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_dataset_parquet.cpython-311-x86_64-linux-gnu.so:
 DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_dataset_parquet_encryption.cpython-311-x86_64-linux-gnu.so:
 DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_feather.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_flight.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_fs.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_gcsfs.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_hdfs.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_json.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_orc.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_parquet.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_parquet_encryption.cpython-311-x86_64-linux-gnu.so:
 DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/_s3fs.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     
/tmp/staticx-pyi-lo4_jyb_/pyarrow/_substrait.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/lib.cpython-311-x86_64-linux-gnu.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow.so.1700: DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_acero.so.1700: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_dataset.so.1700: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_flight.so.1700: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_python.so: DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_python_flight.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_python_parquet_encryption.so: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libarrow_substrait.so.1700: 
DT_RUNPATH='$ORIGIN'
     /tmp/staticx-pyi-lo4_jyb_/pyarrow/libparquet.so.1700: DT_RUNPATH='$ORIGIN'
   
   See https://github.com/JonathonReinhart/staticx/issues/188
   ```
   
   ### Potential Resolution
   I won't pretend to understand the various complexities of your build 
scripts. But it seems like PyArrow would need to either not set RPATH/RUNPATH 
at all, or set RPATH rather than RUNPATH (since StaticX does support RPATH 
relative to $ORIGIN).
   
   
   ### Component(s)
   
   Python


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@arrow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to