3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/top-level
Ivan ca8b128aa1 credstash: add standalone Python application (#51807)
credstash was only available as a library. Provide it as a standalone
application as well.

In order for this to work, I needed to remove the copy of
the library that's placed in $out/bin and marked executable
during the install phase. Other than the patched shebang and
executable bit, it's identical to the library that's installed to
$out/lib/python3.7/site-packages.

Before the postFixup has run `wrapPythonPrograms`, $out/bin contains
two Python files -- credstash and credstash.py -- where bin/credstash
is the executable you'd expect a user to invoke from the command-line
and bin/credstash.py contains the credstash module, which bin/credstash
imports.

After `wrapPythonPrograms` has run, bin/credstash is a shell
wrapper around the bin/.credstash-wrapped python entrypoint, and
bin/credstash.py is shell wrapper around bin/.credstash.py-wrapped.
Invoking bin/credstash execs bin/.credstash-wrapped, and that python
script attempts to import the credstash module from bin/credstash.py,
the shell wrapper, rather than either bin/.credstash.py-wrapped or
lib/python3.7/site-packages/credstash.py.

This leads to an error:

    $ credstash get mykey
    Traceback (most recent call last):
      File "/nix/store/hk6yma716w6141lcdh509d6qyyi7zm0i-python3.7-credstash-1.15.0/bin/.credstash-wrapped", line 8, in <module>
        from credstash import main
      File "/nix/store/hk6yma716w6141lcdh509d6qyyi7zm0i-python3.7-credstash-1.15.0/bin/credstash.py", line 2
        export PATH='/nix/store/6lm4gi5iv8fbf1b1mm6g3gfnnv63f1gn-python3-3.7.1/bin:/nix/store/hk6yma716w6141lcdh509d6qyyi7zm0i-python3.7-credstash-1.15.0/bin:/nix/store/2n13gf1zdr39ir5dynxlkqndxgy36g08-python3.7-setuptools-40.4.3/bin:/nix/store/mhnqwpa4y1l81zi4cwx989i8h8z9g67l-python3.7-jmespath-0.9.0/bin:/nix/store/qc6q3a2nv4211wyh7q319v6zzd3ab6pc-python3.7-docutils-0.14/bin'${PATH:+':'}$PATH
                  ^
    SyntaxError: invalid syntax

If we try using `dontWrapPythonPrograms` to resolve this, runtime
dependency lookups fail:

    $ credstash get mykey
    Traceback (most recent call last):
      File "/run/current-system/sw/bin/credstash", line 7, in <module>
        from credstash import main
      File "/nix/store/8rmldlvlv1z1xl7w02dy7f5qhkzdrg8z-python3.7-credstash-1.15.0/bin/credstash.py", line 26, in <module>
        import boto3
    ModuleNotFoundError: No module named 'boto3'

I was able to resolve things by simply removing bin/credstash.py before
the postFixup phase has a chance to wrap any executables. Now the
executable imports the library correctly:

 (shell wrapper)
  bin/credstash
        │      (python executable)
        └─> bin/.credstash-wrapped
                   │                        (python library)
                   └─> lib/python3.7/site-packages/credstash.py
2018-12-11 10:49:27 +01:00
..
aliases.nix Merge master into staging-next 2018-12-07 15:22:35 +01:00
all-packages.nix credstash: add standalone Python application (#51807) 2018-12-11 10:49:27 +01:00
beam-packages.nix
coq-packages.nix coqPackages.simple-io: init at 0.2 2018-12-10 15:35:34 +00:00
darwin-packages.nix darwin.trash: add cf-private 2018-11-07 19:15:43 +01:00
default.nix stdenv: implement crossOverlays 2018-12-04 21:06:46 -06:00
dotnet-packages.nix dotnetPackages.SharpFont: 3.1.0 -> 4.0.1 (#49545) 2018-10-31 21:04:31 +01:00
emacs-packages.nix
emscripten-packages.nix
haskell-packages.nix ghc: add new compiler version 8.6.3 2018-12-08 11:46:20 +01:00
haxe-packages.nix
impure.nix
java-packages.nix
lua-packages.nix gobject-introspection: rename package 2018-12-02 12:42:29 +01:00
make-tarball.nix
metrics.nix metrics.nix: add a metrick for the current number of packages as seen by nix-env 2018-11-17 10:24:46 +00:00
ocaml-packages.nix ocamlPackages.checkseum: init at 0.0.3 2018-12-11 08:12:27 +00:00
perl-packages.nix Merge master into staging-next 2018-12-07 15:22:35 +01:00
php-packages.nix phpPackages: drop all packages and package versions for PHP5 2018-11-18 13:08:50 +01:00
pure-packages.nix
python-packages.nix Merge pull request #51664 from erictapen/tlslite-ng-init 2018-12-10 13:03:27 +00:00
release-cross.nix Merge pull request #50282 from vincrusher/master 2018-11-12 15:57:23 -05:00
release-lib.nix systems/examples.nix: move riscv function to let binding 2018-11-29 19:15:28 -06:00
release-python.nix
release-small.nix atlas: remove 2018-11-04 20:23:12 -06:00
release.nix darwin-tested: readd wireshark 2018-11-07 13:02:51 -06:00
splice.nix
stage.nix top-level/stage.nix: add static overlay 2018-12-04 21:56:03 -06:00
static.nix top-level/stage.nix: add static overlay 2018-12-04 21:56:03 -06:00
unix-tools.nix
wine-packages.nix winePackages.wine: add SDL support 2018-11-29 00:18:46 +01:00