-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
python docs: add an example for a virtualenv and pip through nix-shell #21837
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -804,6 +804,55 @@ If you want to create a Python environment for development, then the recommended | |
| method is to use `nix-shell`, either with or without the `python.buildEnv` | ||
| function. | ||
|
|
||
| ### How to consume python modules using pip in a virtualenv like I am used to on other Operating Systems ? | ||
|
|
||
| This is an example of a `default.nix` for a `nix-shell`, which allows to consume a `virtualenv` environment, | ||
| and install python modules through `pip` the traditional way. | ||
|
|
||
| Create this `default.nix` file, together with a `requirements.txt` and simply execute `nix-shell`. | ||
|
|
||
| ``` | ||
| with import <nixpkgs> {}; | ||
| with pkgs.python27Packages; | ||
|
|
||
| stdenv.mkDerivation { | ||
| name = "impurePythonEnv"; | ||
| buildInputs = [ | ||
| # these packages are required for virtualenv and pip to work: | ||
| # | ||
| python27Full | ||
| python27Packages.virtualenv | ||
| python27Packages.pip | ||
| # the following packages are related to the dependencies of your python | ||
| # project. | ||
| # In this particular example the python modules listed in the | ||
| # requirements.tx require the following packages to be installed locally | ||
| # in order to compile any binary extensions they may require. | ||
| # | ||
| taglib | ||
| openssl | ||
| git | ||
| libxml2 | ||
| libxslt | ||
| libzip | ||
| stdenv | ||
| zlib ]; | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what's the purpose of all these packages? Are some hard dependencies, or are they just examples of packages?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. my particular requirements.txt is for a twisted project which requires a few python modules containing C extensions. The packages listed are the dependencies required to build those particular python modules. I guess I can expand that block stating which are required (like the virtualenv and pip), and which are related to dependencies of the modules listed in the requirements.txt file. |
||
| src = null; | ||
| shellHook = '' | ||
| # set SOURCE_DATE_EPOCH so that we can use python wheels | ||
| SOURCE_DATE_EPOCH=$(date +%s) | ||
| virtualenv --no-setuptools venv | ||
| export PATH=$PWD/venv/bin:$PATH | ||
| pip install -r requirements.txt | ||
| ''; | ||
| } | ||
| ``` | ||
|
|
||
| Note that the `pip install` is an imperative action. So every time `nix-shell` | ||
| is executed it will attempt to download the python modules listed in | ||
| requirements.txt. However these will be cached locally within the `virtualenv` | ||
| folder and not downloaded again. | ||
|
|
||
|
|
||
| ## Contributing | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.