Python Project Dependencies: Difference between revisions

From Littledamien Wiki
Jump to navigation Jump to search
Line 1: Line 1:
[[Category:Python]] [[Category:Web Development]]
[[Category:Python]] [[Category:Web Development]]
== requirements.txt ==
== requirements.txt ==
First, for every project create and load a [[Virtual Environments with Python|virtual environment]] specific to the project before installing dependencies.


Project dependencies are stored in a file named `requirements.txt` in the top level of the project, e.g.: <ref>[https://www.fullstackpython.com/application-dependencies.html Application Dependencies], Full Python Stack</ref>
Project dependencies are stored in a file named `requirements.txt` in the top level of the project, e.g.: <ref>[https://www.fullstackpython.com/application-dependencies.html Application Dependencies], Full Python Stack</ref>


<pre>
`requirements.txt` defines ''concrete'' dependencies for non-redistributable applications. It defines the dependencies between packages and the source for those packages, especially if they don't come from PyPi.
 
An example `requirements.txt`:
 
<syntaxhighlight lang="txt">
django==1.6
django==1.6
bpython==0.12
bpython==0.12
Line 16: Line 22:
django-oauth2-provider==0.2.4
django-oauth2-provider==0.2.4
djangorestframework==2.3.1
djangorestframework==2.3.1
</pre>
</syntaxhighlight>
 
=== Saving dependencies ===


Anytime a package is installed with `pip`, it must be added to `requirements.txt`. Or better yet, add the package to `requirements.txt` and use the file to install the new package and verify the project's environment.
Anytime a package is installed with `pip`, it must be added to `requirements.txt`. Or better yet, add the package to `requirements.txt` and use the file to install the new package and verify the project's environment.


Also, make sure to create and load a [[Virtual Environments with Python|virtual environment]] for the project before installing dependencies.
A quick and reliable way to track all the packages currently installed with pip is with
 
<syntaxhighlight lang="bash">
$ pip freeze > requirements.txt
</syntaxhighlight>
 
This saves the packages along with their current version. This means that installing from `requirements.txt` in the future might mean installing older versions of packages. [https://www.kennethreitz.org/essays/a-better-pip-workflow This article] has a recommendation for tracking both the top-level packages and all their dependencies. <ref>[https://www.kennethreitz.org/essays/a-better-pip-workflow A Better Pip Workflow] - Kenneth Reitz</ref>


`requirements.txt` defines ''concrete'' dependencies for non-redistributable applications. It defines the dependencies between packages and the source for those packages, especially if they don't come from PyPi.
=== Installing dependencies ===


The dependencies in `requirements.txt` can be installed with:
Dependencies in `requirements.txt` can be installed with:


<syntaxhighlight leng="bash">
<syntaxhighlight leng="bash">

Revision as of 16:30, 26 March 2018

requirements.txt

First, for every project create and load a virtual environment specific to the project before installing dependencies.

Project dependencies are stored in a file named requirements.txt in the top level of the project, e.g.: [1]

requirements.txt defines concrete dependencies for non-redistributable applications. It defines the dependencies between packages and the source for those packages, especially if they don't come from PyPi.

An example requirements.txt:

django==1.6
bpython==0.12
django-braces==0.2.1
django-model-utils==1.1.0
logutils==0.3.3
South==0.7.6
requests==1.2.0
stripe==1.9.1
dj-database-url==0.2.1
django-oauth2-provider==0.2.4
djangorestframework==2.3.1

Saving dependencies

Anytime a package is installed with pip, it must be added to requirements.txt. Or better yet, add the package to requirements.txt and use the file to install the new package and verify the project's environment.

A quick and reliable way to track all the packages currently installed with pip is with

$ pip freeze > requirements.txt

This saves the packages along with their current version. This means that installing from requirements.txt in the future might mean installing older versions of packages. This article has a recommendation for tracking both the top-level packages and all their dependencies. [2]

Installing dependencies

Dependencies in requirements.txt can be installed with:

$ pip install -r requirements.txt

setup.py

In addition to requirements.txt, setup.py is another file used to check for dependencies when installing a package. [3]

setup.py defines abstract dependencies for redistributable packages. The specific source for those dependencies should be defined elsewhere, e.g. requirements.txt.

Given a directiory containing a setup.py file, a requirements.txt file can be written that will install all dependencies found in setup.py from PyPi:

--index-url https://pypi.python.org/simple

-e .

If any dependencies should come from another source, requirements.txt can be modified similar to this:

--index-url https://pypi.python.org/simple

-e https://github.com/foo/bar.git#egg=bar
-e .

pip will first install the bar library from GitHub, then move on to install all the dependencies found in setup.py. Since the bar library has already been installed at this point, it will be skipped over when installing libraries from PyPi.

Installing packages defined in setup.py

Command to install the project dependencies defined in setup.py: [4] [5]

$ python setup.py install

Notes

See also

References

  1. Application Dependencies, Full Python Stack
  2. A Better Pip Workflow - Kenneth Reitz
  3. setup.py vs requirements.txt, Donald Stufft
  4. What is setup.py - Stackoverflow
  5. Installing Python Modules - Python Software Foundation