Python PIP install requirements.txt from PIP Freeze

Why would you want to use Python PIP freeze and PIP install from Requirements.txt?

When a python project is created:

  • on server A and needs to be created on Server B
  • in folder A and needs to have a different copy in folder B

All of the modules installed in the source location need to be install on the destination location. This can be done a few of ways:

  • Copying every single python file from the source python local file to the destination.
    • But you need access to the source server, compared to a repo
    • Files may be missing due to path issues
  • Run the python program and ‘pip install’ the missing modules as reported or error messages are displayed.
    • this takes less time but still tedious
  • Run pip freeze > requirements.txt on the source server
    • Run pip install -r requirements.txt on the destination server

The latter is faster and more efficient.

Source Server or Folder PIP Freeze

PIP Freeze looks at the current python environment and what modules/packages have been installed and outputs those modules/packages into a requirements format that can be consumed by the -r or —requirements pip install argument

  • Example…
  • Active the virtual environment then output requirements format with pip freeze
$ source PycharmProjects/venv/newDevice/bin/activate

$ pip freeze > requirements.txt
$ cat requirements.txt
  • The above saves the output to a file name requirements.txt to a local file
  • if you git push this to the repository, the requirements file will be available on the remote server to use if a git pull is performed

On the Remote Server PIP Install -r Requirements.txt

  • get or git (no pun) the requirements file to the remote server
    • This can be done with a git pull if you did:
      • git add requirements.txt
      • git commit -m “my comments”
      • git push
    • Or this can be done by copying the contents or file to a directory:
      • Suggested directory is the project root folder
  • Once the file is located on the remote server:
    • Activate the remote python virtual environment (if you are using one… if you are not… you should.)
      • hostname> source /path/to/virtualenv/project/bin/activate
    • Run the command pip install -r requirements.txt
    • > pip install -r requirements.txt 
      				Requirement already satisfied: certifi==2019.6.16 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 1)) (2019.6.16)
      				Requirement already satisfied: chardet==3.0.4 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 2)) (3.0.4)
      				Collecting Cython==0.29.12 (from -r requirements.txt (line 3))
      				  Downloading (2.0MB)
      					 |████████████████████████████████| 2.0MB 4.0MB/s 
      				Requirement already satisfied: docopt==0.6.2 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 4)) (0.6.2)
      				Requirement already satisfied: idna==2.8 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 5)) (2.8)
      				Requirement already satisfied: pexpect==4.7.0 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 6)) (4.7.0)
      				Requirement already satisfied: ptyprocess==0.6.0 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 7)) (0.6.0)
      				Requirement already satisfied: pymssql==2.1.4 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 8)) (2.1.4)
      				Requirement already satisfied: requests==2.22.0 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 9)) (2.22.0)
      				Collecting SQLAlchemy==1.3.6 (from -r requirements.txt (line 10))
      				  Downloading (5.9MB)
      					 |████████████████████████████████| 5.9MB 35.8MB/s 
      				Requirement already satisfied: urllib3==1.25.3 in /local/virtualenvs/newDevice/lib/python2.7/site-packages (from -r requirements.txt (line 11)) (1.25.3)
      				Building wheels for collected packages: SQLAlchemy
      				  Building wheel for SQLAlchemy ( ... done
      				  Created wheel for SQLAlchemy: filename=SQLAlchemy-1.3.6-cp27-cp27mu-linux_x86_64.whl size=1174553 sha256=b4b0d30145f35bec3b1345e005fa1bb7e1b569614e50dbab5da05683ca0a9b6e
      				  Stored in directory: /r/
      				Successfully built SQLAlchemy
      				Installing collected packages: Cython, SQLAlchemy
      				Successfully installed Cython-0.29.12 SQLAlchemy-1.3.6

You are all set!

PIP Install Help Output

pip install -h

  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

  Install packages from:
  - PyPI (and other indexes) using requirement specifiers.
  - VCS project urls.
  - Local project directories.
  - Local or remote source archives.
  pip also supports installing from "requirements files", which provide
  an easy way to specify a whole environment to be installed.

Install Options:
  -r, --requirement <file>    Install from the given requirements file. This option can be used multiple times.
  -c, --constraint <file>     Constrain versions using the given constraints file. This option can be used multiple times.
  --no-deps                   Don't install package dependencies.
  --pre                       Include pre-release and development versions. By default, pip only finds stable versions.
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
  -t, --target <dir>          Install packages into <dir>. By default this will not replace existing files/folders in <dir>. Use --upgrade to replace existing packages
                              in <dir> with new versions.
  --platform <platform>       Only use wheels compatible with <platform>. Defaults to the platform of the running system.
  --python-version <python_version>
                              Only use wheels compatible with Python interpreter version <version>. If not specified, then the current system interpreter minor version
                              is used. A major version (e.g. '2') can be specified to match all minor revs of that major version.  A minor version (e.g. '34') can also
                              be specified.
  --implementation <implementation>
                              Only use wheels compatible with Python implementation <implementation>, e.g. 'pp', 'jy', 'cp',  or 'ip'. If not specified, then the
                              current interpreter implementation is used.  Use 'py' to force implementation-agnostic wheels.
  --abi <abi>                 Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'.  If not specified, then the current interpreter abi tag is used.
                              Generally you will need to specify --implementation, --platform, and --python-version when using this option.
  --user                      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the Python
                              documentation for site.USER_BASE for full details.)
  --root <dir>                Install everything relative to this alternate root directory.
  --prefix <dir>              Installation prefix where lib, bin and other top-level folders are placed
  -b, --build <dir>           Directory to unpack packages into and build in. Note that an initial build still takes place in a temporary directory. The location of
                              temporary directories can be controlled by setting the TMPDIR environment variable (TEMP on Windows) appropriately. When passed, build
                              directories are not cleaned in case of failures.
  --src <dir>                 Directory to check out editable projects into. The default in a virtualenv is "<venv path>/src". The default for global installs is
                              "<current dir>/src".
  -U, --upgrade               Upgrade all specified packages to the newest available version. The handling of dependencies depends on the upgrade-strategy used.
  --upgrade-strategy <upgrade_strategy>
                              Determines how dependency upgrading should be handled [default: only-if-needed]. "eager" - dependencies are upgraded regardless of
                              whether the currently installed version satisfies the requirements of the upgraded package(s). "only-if-needed" -  are upgraded only when
                              they do not satisfy the requirements of the upgraded package(s).
  --force-reinstall           Reinstall all packages even if they are already up-to-date.
  -I, --ignore-installed      Ignore the installed packages (reinstalling instead).
  --ignore-requires-python    Ignore the Requires-Python information.
  --no-build-isolation        Disable isolation when building a modern source distribution. Build dependencies specified by PEP 518 must be already installed if this
                              option is used.
  --use-pep517                Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy behaviour).
  --install-option <options>  Extra arguments to be supplied to the install command (use like --install-option="--install-scripts=/usr/local/bin"). Use
                              multiple --install-option options to pass multiple options to install. If you are using an option with a directory path, be sure
                              to use absolute path.
  --global-option <options>   Extra global options to be supplied to the call before the install command.
  --compile                   Compile Python source files to bytecode
  --no-compile                Do not compile Python source files to bytecode
  --no-warn-script-location   Do not warn when installing scripts outside PATH
  --no-warn-conflicts         Do not warn about broken dependencies
  --no-binary <format_control>
                              Do not use binary packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all
                              binary packages, :none: to empty the set, or one or more package names with commas between them. Note that some packages are tricky to
                              compile and may fail to install when this option is used on them.
  --only-binary <format_control>
                              Do not use source packages. Can be supplied multiple times, and each time adds to the existing value. Accepts either :all: to disable all
                              source packages, :none: to empty the set, or one or more package names with commas between them. Packages without binary distributions
                              will fail to install when this option is used on them.
  --prefer-binary             Prefer older binary packages over newer source packages.
  --no-clean                  Don't clean up build directories.
  --require-hashes            Require a hash to check each requirement against, for repeatable installs. This option is implied when any package in a requirements file
                              has a --hash option.
  --progress-bar <progress_bar>
                              Specify type of progress to be displayed [on|ascii|off|pretty|emoji] (default: on)

Package Index Options:
  -i, --index-url <url>       Base URL of Python Package Index (default This should point to a repository compliant with PEP 503 (the simple
                              repository API) or a local directory laid out in the same format.
  --extra-index-url <url>     Extra URLs of package indexes to use in addition to --index-url. Should follow the same rules as --index-url.
  --no-index                  Ignore package index (only looking at --find-links URLs instead).
  -f, --find-links <url>      If a url or path to an html file, then parse for links to archives. If a local path or file:// url that's a directory, then look for
                              archives in the directory listing.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.
  --trusted-host <hostname>   Mark this host as trusted, even though it does not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
                              Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
  --no-color                  Suppress colored output



About Daniel Fredrick

Technology enthusiast, Programmer, Network Engineer CCIE# 17094

View all posts by Daniel Fredrick →

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.