(A Japanese translation is available here.)
A Pipfile created by
pipenv install command has the version number of Python. This Pipfile cannot be used on the machine with a different version of Python. 1 In this article, I'm going to introduce how to create a Pipfile which can be used for multiple versions of Python.
When we want to start using Pipenv in a repository, the first thing we do is to issue
pipenv install command. This creates a Pipfile like this:
[[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] [dev-packages] [requires] python_version = "3.6"
This Pipfile is generated on a Windows PC with Python 3.6.4.
Then, if we copy this Pipfile to another PC with Python 3.7 and issue
pipenv install, we will encounter the following error message:
Requested Python version (3.6) not installed Warning: Python 3.6 was not found on your system… You can specify specific versions of Python with: $ pipenv --python path\to\python
On macOS/Linux with pyenv, the required version of Python can be installed by Pipenv using pyenv, but pyenv is not available on Windows.
If there is no need of specifying Python version, we can delete the
[requires] section. Then,
pipenv install command will be successful regardless of the version of Python installed on the machine.
[[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] [dev-packages]
What I've done here is described in the official document.
The inclusion of [requires] python_version = "3.6" specifies that your application requires this version of Python, and will be used automatically when running pipenv install against this Pipfile in the future (e.g. on other machines). If this is not true, feel free to simply remove this section.
When this method is adopted, Pipfile.lock should not be included in version control. This because the content of Pipfile.lock can be different depending on the versions of Python.
- Do not keep Pipfile.lock in version control if multiple versions of Python are being targeted.
To be exact, Pipfile cannot be used when the major or minor version is different. For example, Pipfile for Python 3.6 cannot be used on a machine with Python 3.7. On the other hand, Pipfile can be used when only the patch version is different. For example, Pipfile for Python 3.6.4 can be used on a machine with Python 3.6.5. ↩