Building python packages
Question: I am bitbaking a couple of python libraries and got this warning while adding
second one of them:

    
    
    WARNING: The recipe is trying to install files into a shared area when those files already exist. Those files are:
       /home/ilya/beaglebone-dany/build/tmp/sysroots/beaglebone/usr/lib/python2.7/site-packages/site.py
       /home/ilya/beaglebone-dany/build/tmp/sysroots/beaglebone/usr/lib/python2.7/site-packages/site.pyo
    

The libraries both use `inherit distutils`. So this is okay as far as bitbake
goes, but when I tried to install the second package via opkg, I got this
error:

    
    
    # opkg install http://yocto.local:8080/python-requests_1.2.0-r0_armv7a-vfp-neon.ipk
    Downloading http://yocto.local:8080/python-requests_1.2.0-r0_armv7a-vfp-neon.ipk.
    Installing python-requests (1.2.0-r0) to root...
    Configuring python-requests.
    
    # opkg install http://yocto.local:8000/python-mylib_0.0.1-r0_armv7a-vfp-neon.ipk
    Downloading http://yocto.local:8080/python-mylib_0.0.1-r0_armv7a-vfp-neon.ipk.
    Installing python-mylib (0.0.1-r0) to root...
    Collected errors:
     * check_data_file_clashes: Package mylib-python wants to install file /usr/lib/python2.7/site-packages/site.py
            But that file is already provided by package  * python-requests
     * check_data_file_clashes: Package mylib-python wants to install file /usr/lib/python2.7/site-packages/site.pyo
            But that file is already provided by package  * python-requests
     * opkg_install_cmd: Cannot install package mylib-python.
    

Both recipes look just like so:

    
    
    DESCRIPTION = "Requests: HTTP for Humans"
    HOMEPAGE = "http://docs.python-requests.org/en/latest/"
    SECTION = "devel/python"
    LICENSE = "Apache-2.0"
    
    DEPENDS = "python"
    RDEPENDS_${PN} = "python-core"
    PR = "r0"
    
    SRC_URI = "git://github.com/kennethreitz/requests;protocol=git"
    
    S = "${WORKDIR}/git/"
    
    inherit distutils
    
    #NOTE: I'm not 100% sure whether I still need to export these?
    export BUILD_SYS
    export HOST_SYS
    export STAGING_INCDIR
    export STAGING_LIBDIR
    
    BBCLASSEXTEND = "native"
    

I have copied this from [pycurl
recipe](http://git.yoctoproject.org/cgit/cgit.cgi/poky/plain/meta/recipes-
devtools/python/python-pycurl_7.19.0.bb?id=danny-8.0.1), which also have had
these lines that I removed:

    
    
    do_install_append() {
        rm -rf ${D}${datadir}/share
    }
    


Answer: To get rid of the conflicting `/usr/lib/python2.7/site-packages/site.py`, one
needs to avoid shipping this file by doing this:

    
    
    do_install_append() {
      rm -f ${D}${libdir}/python*/site-packages/site.py*
    }
    

There had been another issue with the original version of recipe, the files it
installed contained just `.egg` directory. I wasn't able to `import` the
resulting package.

It turns out that using `inherit setuptools` instead of `inherit distutils`
works.

I'm not a Python expert, but all [setuptools
class](http://git.yoctoproject.org/cgit/cgit.cgi/poky/plain/meta/classes/setuptools.bbclass?id=danny-8.0.1)
does is just this:

    
    
    inherit distutils
    
    DEPENDS += "python-setuptools-native"
    
    DISTUTILS_INSTALL_ARGS = "--root=${D} \
        --single-version-externally-managed \
        --prefix=${prefix} \
        --install-lib=${PYTHON_SITEPACKAGES_DIR} \
        --install-data=${datadir}"
    

It turns out that some modules (e.g.
[PyBBIO](https://github.com/alexanderhiam/PyBBIO)) do not recognise `--single-
version-externally-managed`, so then you have to use `inherit distutils` and
you do get a working package.

Below is full recipe for the _python-requests_ package which should soon be
available upstream, in case you are intending to use it.

    
    
    DESCRIPTION = "Requests: HTTP for Humans"
    HOMEPAGE = "http://docs.python-requests.org/en/latest/"
    SECTION = "devel/python"
    LICENSE = "Apache-2.0"
    
    #DEPENDS = "python-core"
    RDEPENDS_${PN} = "python"
    PR = "r0"
    
    SRC_URI = "git://github.com/kennethreitz/requests;protocol=git"
    
    S = "${WORKDIR}/git/"
    
    inherit setuptools
    
    # need to export these variables for python-config to work
    export BUILD_SYS
    export HOST_SYS
    export STAGING_INCDIR
    export STAGING_LIBDIR
    
    BBCLASSEXTEND = "native"
    
    do_install_append() {
      rm -f ${D}${libdir}/python*/site-packages/site.py*
    }
    

