Tips

Missing dependencies

Some python packages depend on external libraries or applications to be available already when running pip2nix generate. The following example shows a typical error:

[nix-shell:~/wo/synapse]$ pip2nix generate -r requirements.txt -c constraints.txt

Collecting pynacl==0.3.0 (from -r requirements.txt (line 47))
  Using cached PyNaCl-0.3.0.tar.gz
  Saved /var/folders/v2/kx2sg5693tb1h84zc2hmjjgr0000gn/T/tmpNYy5RApip2nix/PyNaCl-0.3.0.tar.gz
    Complete output from command python setup.py egg_info:
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable

    [ ... ]

    ld: library not found for -lffi
    clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/v2/kx2sg5693tb1h84zc2hmjjgr0000gn/T/pip-build-KcVPbJ/pynacl/setup.py", line 278, in <module>
        "Programming Language :: Python :: 3.4",
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/__init__.py", line 128, in setup
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/__init__.py", line 123, in _install_setup_requires
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/dist.py", line 455, in fetch_build_eggs
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/pkg_resources/__init__.py", line 866, in resolve
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/pkg_resources/__init__.py", line 1146, in best_match
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/pkg_resources/__init__.py", line 1158, in obtain
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/dist.py", line 522, in fetch_build_egg
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/command/easy_install.py", line 673, in easy_install
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/command/easy_install.py", line 699, in install_item
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/command/easy_install.py", line 882, in install_eggs
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/command/easy_install.py", line 1150, in build_and_install
      File "/nix/store/hlcj0hzxamapajgrbq3bkx1xlmfcx2f3-python2.7-setuptools-38.2.3/lib/python2.7/site-packages/setuptools-38.2.3-py2.7.egg/setuptools/command/easy_install.py", line 1138, in run_setup
    distutils.errors.DistutilsError: Setup script exited with error: command 'clang' failed with exit status 1

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/v2/kx2sg5693tb1h84zc2hmjjgr0000gn/T/pip-build-KcVPbJ/pynacl/

This happens because pip2nix depends on the following call to find out about some meta information of the package:

python setup.py egg_info

Running the command inside of another invocation of nix-shell can usually mitigate the trouble. As a one-shot command it looks as follows:

nix-shell -p python27Packages.cffi \
       --command 'pip2nix generate -r requirements.txt -c constraints.txt'

Entering the sub shell needs a tweak to the environment variable PATH at the moment. The next example shows how to run this in two steps:

[nix-shell:~/wo/synapse]$ PATH=/bin:$PATH nix-shell -p python27Packages.cffi
[nix-shell:~/wo/synapse]$ pip2nix generate -r requirements.txt -c constraints.txt

Failing nix-prefetch-hg

When pointing to Mercurial repositories from your requirement files, you might run into a situation where things fail due to issues with nix-prefetch-hg. When trying to run it manually you would see an error as follows:

nix-prefetch-hg https://code.example.com/your-repository
abort: http authorization required for https://code.example.com/your-repository

The background is that the prefetch scripts change the environment variable HOME and this means that Mercurial will not find ~/.hgrc.

Manually setting the environment variable HGRCPATH can be used as a workaround:

export HGRCPATH=~/.hgrc