73 lines
3.1 KiB
Markdown
73 lines
3.1 KiB
Markdown
|
This package allows users to package python modules without creating package
|
||
|
Makefiles for each individual module and their dependencies. It provides a
|
||
|
way making packaging python packages faster and may also facilitate the process
|
||
|
of developing Makefiles for new python packages
|
||
|
|
||
|
This is a raw DEVEL only package. Using it may entail a lot of implementation
|
||
|
details and you may need to resolve target dependencies and package details on
|
||
|
your own
|
||
|
|
||
|
- Third party python packages may depend on features not included in e.g.
|
||
|
python-light
|
||
|
- Some python modules may require host install of another module to progress,
|
||
|
e.g. target cryptography requires host cffi
|
||
|
- Some python modules have external C library dependencies, e.g. pyOpenSSL
|
||
|
requires openssl libs
|
||
|
- Some packages may have an autoconf configure script whose arguments we
|
||
|
cannot control with pip and has to be passed on (hacked) by overriding some
|
||
|
environment variables
|
||
|
|
||
|
## How it works
|
||
|
|
||
|
1. Install host modules required for building target modules
|
||
|
2. Install each target module to separate directories
|
||
|
3. Install another copy of modules for cleanup purposes to make list of
|
||
|
installed files to be removed from target modules installed in step 2
|
||
|
|
||
|
Why should it be so
|
||
|
|
||
|
1. Installing target cryptography requires host installation of cffi module
|
||
|
2. cryptography requires setuptools and pip will install its own copy with
|
||
|
--ignore-installed. When PACKAGE_python-setuptools is also selected, opkg
|
||
|
will complain of data file clashes if it was not removed here.
|
||
|
|
||
|
Pip will handle dependency requirements of python modules, but external
|
||
|
dependencies like c libraries has to be prepared by the build system. The
|
||
|
issue is that there is currently no way to express such dependencies, thus may
|
||
|
cause build failure, e.g. pycrypto requires the presence of libgmp to build
|
||
|
successfully.
|
||
|
|
||
|
## Tips
|
||
|
|
||
|
If something goes wrong, we can add additional arguments to pip command
|
||
|
line to check the detailed build process. Some useful arguments may be
|
||
|
|
||
|
- -v, for verbose output. Repeat this option if the current level of
|
||
|
verbosity is not enough
|
||
|
- --no-clean, for preserving pip build dir on build failure
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
tornado (python-only module)
|
||
|
|
||
|
CONFIG_PACKAGE_python-packages=y
|
||
|
CONFIG_PACKAGE_python-packages-list="tornado==4.4.2"
|
||
|
|
||
|
cryptography (requires installation of host modules and cleanup on target modules)
|
||
|
|
||
|
CONFIG_PACKAGE_python-packages=y
|
||
|
CONFIG_PACKAGE_python-packages-list-host="cffi"
|
||
|
CONFIG_PACKAGE_python-packages-list="cryptography"
|
||
|
CONFIG_PACKAGE_python-packages-list-cleanup="setuptools"
|
||
|
|
||
|
pycrypto 2.7a1 (python module with autoconf configure script; depends on
|
||
|
libgmp; broken wmmintrin.h). 2.6.1 does not work because of a flaw in
|
||
|
the setup.py hardcoding host include directory
|
||
|
|
||
|
CONFIG_PACKAGE_libgmp=y
|
||
|
CONFIG_PACKAGE_python-packages=y
|
||
|
CONFIG_PACKAGE_python-packages-list="https://github.com/dlitz/pycrypto/archive/v2.7a1.tar.gz"
|
||
|
CONFIG_PACKAGE_python-packages-envs="ac_cv_header_wmmintrin_h=no build_alias=$(GNU_HOST_NAME) host_alias=$(GNU_TARGET_NAME) target_alias=$(GNU_TARGET_NAME)"
|
||
|
CONFIG_PACKAGE_python-packages-extra-deps="libgmp.so.10"
|
||
|
|