I have a python script that calls an external .exe program and captures the output using subprocess.run. The script needs to run in an environment where all dependencies need to be covered in the script itself or in python packages. I’m able to build a package that includes the .exe using manifest.in, but how do I reference the .exe in the python script?
My manifest.in:
include src/kubectl.exe
Hi Gary, I think you can use importlib.resources
(or its backport) to locate the file inside the package (e.g. via as_file
).
Then you can use subprocess.run
to run this file.
(In theory, subprocess.run
should share the same environment variables with the spawned process, so if you activated a virtualenv with the dependencies installed, this should be visible right?)
Also, if you’re specifying it in MANFIEST.in
, make sure you set include_package_data = True
if using Setuptools (or the equivalent for other build backends), so the .exe
gets bundled into the wheel.
And of course, make sure you have and follow the appropriate license to distribute the external binary.
Gary, there is some documentation about that in Data Files Support - setuptools 69.0.3.post20231214 documentation. Please feel free to post in the setuptools
GitHub discussions if you have problems with that.
This is all very helpful, thank you!