I want to create a setup.py which would install my files into custom directories. I have a certain prefix, where I would like to get the following result:
/my/prefix/
bin/
script.sh
libexec/
one.py
two.py
...
lib/pythonX.Y/site-packages/
package/...
My initial project is following:
/
script.sh
one.py
two.py
...
setup.py
package/...
__init__.py
...
What would be the best way to achieve that? I would like to be able to install it later with something like:
python setup.py install --prefix=/my/prefix
I can get "package" nicely installed in the correct directory as lib/pythonX.Y/site-packages under --prefix is the default location. But is there a clean way to get script.sh into "bin" and other python files into "libexec"? The only way I see to achieve that would be to manually copy those files in my setup.py script. May-be there is a cleaner and more standard way to do that?
(edit)
Solution
I ended up with setup.py like that:
setup(name='mylib',
scripts=['script.sh'],
data_files=[('libexec', ['one.py', 'two.py'])]
)
Of course, you could iterate over all python files for libexec, but I only have 2-3 python files I need there.
(edit2)
Additionally, I can have setup.cfg with the following:
[install]
prefix=/my/prefix
and instead of python setup.py install --prefix=/my/prefix
I can just do:
python setup.py install
The scripts are handled by use of the scripts
parameter to the setup function. For libexec you can treat them as data files and use a data options.
setup(...
scripts=glob("bin/*"),
data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))],
...
)
I'm not sure how that would work with a --prefix
option, I've never tried that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With