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
- Run
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
certifi==2019.6.16
chardet==3.0.4
Cython==0.29.12
docopt==0.6.2
idna==2.8
pexpect==4.7.0
ptyprocess==0.6.0
pymssql==2.1.4
requests==2.22.0
SQLAlchemy==1.3.6
urllib3==1.25.3
- 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
- This can be done with a
- 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 (project)>
-
- 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 https://files.pythonhosted.org/packages/22/71/0488db26e4525ac6c88af2a4486122a0511c68ff488199d3d519356a6be2/Cython-0.29.12-cp27-cp27mu-manylinux1_x86_64.whl (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 https://files.pythonhosted.org/packages/55/98/56b7155bab287cd0c78dee26258835db36e91f2efef41f125ed6f6f1f334/SQLAlchemy-1.3.6.tar.gz (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 (setup.py) ... done Created wheel for SQLAlchemy: filename=SQLAlchemy-1.3.6-cp27-cp27mu-linux_x86_64.whl size=1174553 sha256=b4b0d30145f35bec3b1345e005fa1bb7e1b569614e50dbab5da05683ca0a9b6e Stored in directory: /r/sanyo.unx.sas.com/vol/vol910/u91/dazfre/.cache/pip/wheels/f2/ec/e0/d7deb0c981557e373edf7370574b7001690892afe5fea30c3c Successfully built SQLAlchemy Installing collected packages: Cython, SQLAlchemy Successfully installed Cython-0.29.12 SQLAlchemy-1.3.6
- Activate the remote python virtual environment (if you are using one… if you are not… you should.)
You are all set!
PIP Install Help Output
pip install -h
Usage:
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> ...
Description:
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 setup.py install command (use like --install-option="--install-scripts=/usr/local/bin"). Use
multiple --install-option options to pass multiple options to setup.py 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 setup.py 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 https://pypi.org/simple). 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.
--disable-pip-version-check
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