Skip to content
This repository was archived by the owner on Oct 7, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,11 @@ Once Nix expressions are generated you should be able to see 3 new files:
- ``requirements_frozen.txt`` - full frozen set for your for you pypi2nix call.
This is the output you would expect from `pip freeze`.

- ``requirements_generated.nix`` - this are the generated nix expressions
- ``requirements.nix`` is a file which contains a nix expression to for the package set that was built.

- ``requirements_override.nix`` - this is an empty file which is ment to
override generated nix expressions.

- ``requirements.nix`` is a file which connects ``requirements_generated.nix``
and ``requirements_override.nix`` and exposes it for futher usage.


Non-python/system dependencies
Expand Down
19 changes: 2 additions & 17 deletions examples/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ pillow-clear:
rm -f pillow
rm -f pillow.txt
rm -f pillow.nix
rm -f pillow_generated.nix
rm -f pillow_frozen.txt


Expand All @@ -103,7 +102,6 @@ empy-clear:
rm -f empy
rm -f empy.txt
rm -f empy.nix
rm -f empy_generated.nix
rm -f empy_frozen.txt


Expand Down Expand Up @@ -132,7 +130,6 @@ lektor-clear:
rm -f lektor
rm -f lektor.txt
rm -f lektor.nix
rm -f lektor_generated.nix
rm -f lektor_frozen.txt


Expand Down Expand Up @@ -160,7 +157,6 @@ rss2email-clear:
rm -f rss2email
rm -f rss2email.txt
rm -f rss2email.nix
rm -f rss2email_generated.nix
rm -f rss2email_frozen.txt


Expand All @@ -187,7 +183,6 @@ awscli_and_requests-clear:
rm -f awscli.txt
rm -f requests.txt
rm -f awscli_and_requests.nix
rm -f awscli_and_requests_generated.nix
rm -f awscli_and_requests_frozen.txt


Expand Down Expand Up @@ -222,18 +217,14 @@ scipy-clear:
rm -f scipy
rm -f scipy.txt
rm -f scipy.nix
rm -f scipy_generated.nix
rm -f scipy_frozen.txt

tornado: tornado.nix
echo "building and testing tornado..."
nix-build tornado.nix -o tornado -A interpreter --show-trace
./tornado/bin/python -c 'import tornado'
nix-shell tornado.nix -A interpreter --run "python -c 'import tornado'"
if [ `cat tornado_generated.nix | grep "69253c820df473407c562a227d0ba36df25018ab" | wc -l` != "1" ]; then \
echo "ERROR: Revision '69253c820df473407c562a227d0ba36df25018ab' not found in tornado_generated.nix!"; \
exit 123; \
fi
if ./string_in_file "69253c820df473407c562a227d0ba36df25018ab" tornado.nix ; then true ; else echo "ERROR: Revision '69253c820df473407c562a227d0ba36df25018ab' not found in tornado.nix!" ; exit 123 ; fi

tornado.nix: tornado.txt $(PYPI2NIX)
echo "generating tornado.nix expressions ..."
Expand All @@ -246,7 +237,6 @@ tornado-clear:
rm -f tornado
rm -f tornado.txt
rm -f tornado.nix
rm -f tornado_generated.nix
rm -f tornado_frozen.txt


Expand Down Expand Up @@ -274,7 +264,6 @@ ldap-clear:
rm -f ldap
rm -f ldap.txt
rm -f ldap.nix
rm -f ldap_generated.nix
rm -f ldap_frozen.txt


Expand All @@ -283,10 +272,7 @@ mercurial: mercurial.nix
nix-build mercurial.nix -o mercurial -A interpreter --show-trace -j 1
./mercurial/bin/python -c 'import flake8'
nix-shell mercurial.nix -A interpreter --run "python -c 'import flake8'"
if [ `cat mercurial_generated.nix | grep "a209fb6" | wc -l` != "1" ]; then \
echo "ERROR: Revision 'a209fb6' not found in tornado_generated.nix!"; \
exit 123; \
fi
if ./string_in_file "a209fb6" mercurial.nix ; then true ; else echo "ERROR: Revision 'a209fb6' not found in tornado_generated.nix!"; exit 123; fi

mercurial.nix: mercurial.txt $(PYPI2NIX)
echo "generating mercurial.nix expressions ..."
Expand All @@ -302,5 +288,4 @@ mercurial-clear:
rm -f mercurial
rm -f mercurial.txt
rm -f mercurial.nix
rm -f mercurial_generated.nix
rm -f mercurial_frozen.txt
3 changes: 3 additions & 0 deletions examples/string_in_file
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had to create a bash script that checks if a string is in file because I could't figure out make and the previous make file rule just didn't work anymore. I really don't know why.


exec grep "$1" "$2" > /dev/null
42 changes: 18 additions & 24 deletions src/pypi2nix/stage3.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@

python = withPackages {};

generated = import %(generated_file)s
{ inherit pkgs python commonBuildInputs commonDoCheck; };
generated = self: {
%(generated_package_nix)s
};
overrides = import %(overrides_file)s { inherit pkgs python; };

in python.withPackages (fix' (extends overrides generated))
Expand All @@ -91,18 +92,18 @@
'''

GENERATED_PACKAGE_NIX = '''
"%(name)s" = python.mkDerivation {
name = "%(name)s-%(version)s";
src = %(fetch_expression)s;
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = %(propagatedBuildInputs)s;
meta = with pkgs.stdenv.lib; {
homepage = "%(homepage)s";
license = %(license)s;
description = "%(description)s";
"%(name)s" = python.mkDerivation {
name = "%(name)s-%(version)s";
src = %(fetch_expression)s;
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = %(propagatedBuildInputs)s;
meta = with pkgs.stdenv.lib; {
homepage = "%(homepage)s";
license = %(license)s;
description = "%(description)s";
};
};
};
'''

OVERRIDES_NIX = '''
Expand All @@ -129,9 +130,6 @@ def main(packages_metadata,
default_file = os.path.join(
current_dir, '{}.nix'.format(requirements_name)
)
generated_file = os.path.join(
current_dir, '{}_generated.nix'.format(requirements_name)
)
overrides_file = os.path.join(
current_dir, '{}_override.nix'.format(requirements_name)
)
Expand Down Expand Up @@ -195,9 +193,9 @@ def main(packages_metadata,
description=item.get("description", ""),
))

generated = GENERATED_NIX % (
version, ' '.join(sys.argv[1:]), '\n\n'.join(
GENERATED_PACKAGE_NIX % x for x in generated_packages_metadata))
generated = '\n\n'.join(
GENERATED_PACKAGE_NIX % x for x in generated_packages_metadata
)

overrides = OVERRIDES_NIX % ""

Expand All @@ -210,15 +208,11 @@ def main(packages_metadata,
"with pkgs; [ %s ]" % (' '.join(extra_build_inputs)) or
"[]"
),
generated_file='.' + generated_file[len(current_dir):],
overrides_file='.' + overrides_file[len(current_dir):],
enable_tests=str(enable_tests).lower(),
generated_package_nix=generated,
)

with open(generated_file, 'w+') as f:
f.write(generated.strip())
click.echo('|-> writing %s' % generated_file)

if not os.path.exists(overrides_file):
with open(overrides_file, 'w+') as f:
f.write(overrides.strip())
Expand Down