Installation of clingo binary along clyngor
Project description
# Clyngor with clingo
This is a python package installing a clingo binary along the [clyngor package](https://github.com/aluriak/clyngor),
so the end-user will not have to care about the clingo installation.
The clingo binary is taken for Linux, OSX and Windows on [the official release page](https://github.com/potassco/clingo/releases/)
# Installation
When someone (who doesn't understand "install clingo binary in your path") have to install clyngor, give them that line instead:
pip install clyngor-with-clingo
A clingo executable will appear in their `bin`. May need root access if the said someone is working at system level.
## Maintenance
The package must be updated to use new clingo binaries.
- Script `retrieve-clingo.sh <clingo version>` will automatically retrieve the given clingo version.
- Script `put-clingo-version.sh <clingo version>` will automatically push the given clingo version into the package.
Use [zest.releaser](https://zestreleaser.readthedocs.io) to upload new versions ; be careful to **match clingo version with package version**.
# How to perform this magic
## The current solution: faking clingo as a python script
[Link to the way of doing that](https://stackoverflow.com/questions/24686838/distributing-a-binary-utility-in-setuptools). Thanks !
I end up [reproducing the same entry point implementation, using pkg_resource](clyngor_with_clingo/__init__.py), and it works:
binaries are embedded in the package using the [MANIFEST.in](MANIFEST.in), and the package only real operation
is to delegate command line arguments to the proper clingo binary.
## The on-the-fly solution: hack upon setuptools to download binary at installation
Method used by [pyasp](https://github.com/sthiele/pyasp/blob/master/setup.py#L136).
Has a lot of drawbacks, such as binary downloading from the client side, and necessity to use `--no-cache-dir` pip flag to force pip to execute the hack.
## The proper but non-working solution: embed a platform-specific binary into a python package
The python part of the package is simplistic (well, there could be **no** python in this package),
be [we still need a basic architecture](https://stackoverflow.com/questions/12461603/setting-up-setup-py-for-packaging-of-a-single-py-file-and-a-single-data-file-wi).
### platform-specific magic
Setuptools provides since [PEP 508](https://www.python.org/dev/peps/pep-0508) the environment markers,
theoretically [usable in setup.cfg](https://stackoverflow.com/questions/44878440/correct-use-of-pep-508-environment-markers-in-setup-cfg)
with [setuptools](https://github.com/pypa/setuptools/pull/1520):
[options.data_files]
bin/clingo =
bin/linux/clingo; platform_system=="Linux"
bin/macos/clingo; platform_system=="Darwin"
bin/win/clingo.exe; platform_system=="Windows"
But it does not works. [A question has been asked about it](https://github.com/pypa/setuptools/issues/1728), also [on SO](https://stackoverflow.com/q/56004271/3077939).
Probably it's because data_files does not support environment markers. Hence this solution has been abandonned.
This is a python package installing a clingo binary along the [clyngor package](https://github.com/aluriak/clyngor),
so the end-user will not have to care about the clingo installation.
The clingo binary is taken for Linux, OSX and Windows on [the official release page](https://github.com/potassco/clingo/releases/)
# Installation
When someone (who doesn't understand "install clingo binary in your path") have to install clyngor, give them that line instead:
pip install clyngor-with-clingo
A clingo executable will appear in their `bin`. May need root access if the said someone is working at system level.
## Maintenance
The package must be updated to use new clingo binaries.
- Script `retrieve-clingo.sh <clingo version>` will automatically retrieve the given clingo version.
- Script `put-clingo-version.sh <clingo version>` will automatically push the given clingo version into the package.
Use [zest.releaser](https://zestreleaser.readthedocs.io) to upload new versions ; be careful to **match clingo version with package version**.
# How to perform this magic
## The current solution: faking clingo as a python script
[Link to the way of doing that](https://stackoverflow.com/questions/24686838/distributing-a-binary-utility-in-setuptools). Thanks !
I end up [reproducing the same entry point implementation, using pkg_resource](clyngor_with_clingo/__init__.py), and it works:
binaries are embedded in the package using the [MANIFEST.in](MANIFEST.in), and the package only real operation
is to delegate command line arguments to the proper clingo binary.
## The on-the-fly solution: hack upon setuptools to download binary at installation
Method used by [pyasp](https://github.com/sthiele/pyasp/blob/master/setup.py#L136).
Has a lot of drawbacks, such as binary downloading from the client side, and necessity to use `--no-cache-dir` pip flag to force pip to execute the hack.
## The proper but non-working solution: embed a platform-specific binary into a python package
The python part of the package is simplistic (well, there could be **no** python in this package),
be [we still need a basic architecture](https://stackoverflow.com/questions/12461603/setting-up-setup-py-for-packaging-of-a-single-py-file-and-a-single-data-file-wi).
### platform-specific magic
Setuptools provides since [PEP 508](https://www.python.org/dev/peps/pep-0508) the environment markers,
theoretically [usable in setup.cfg](https://stackoverflow.com/questions/44878440/correct-use-of-pep-508-environment-markers-in-setup-cfg)
with [setuptools](https://github.com/pypa/setuptools/pull/1520):
[options.data_files]
bin/clingo =
bin/linux/clingo; platform_system=="Linux"
bin/macos/clingo; platform_system=="Darwin"
bin/win/clingo.exe; platform_system=="Windows"
But it does not works. [A question has been asked about it](https://github.com/pypa/setuptools/issues/1728), also [on SO](https://stackoverflow.com/q/56004271/3077939).
Probably it's because data_files does not support environment markers. Hence this solution has been abandonned.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Close
Hashes for clyngor-with-clingo-5.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98550bb161c0470a5b4e254d7fdedfd56390d8b200f81927c5d887e28eb81fa9 |
|
MD5 | a3b8bd8be6db9c0c7f59fb5583376b89 |
|
BLAKE2b-256 | 74ef51278d397977a355df1f67e8b4227c3b1d8788ba361906be0d3703d8ea45 |