Pipenv é uma ferramenta de gerenciamento virtualenv Python que oferece suporte a uma infinidade de sistemas e preenche perfeitamente as lacunas entre pip, python (usando sistema python, pyenv ou asdf) e virtualenv. Linux, macOS e Windows são cidadãos de primeira classe no pipenv.
Pipenv cria e gerencia automaticamente um virtualenv para seus projetos, bem como adiciona/remove pacotes de seu Pipfile
conforme você instala/desinstala pacotes. Ele também gera um projeto Pipfile.lock
, que é usado para produzir compilações determinísticas.
O objetivo principal do Pipenv é fornecer aos usuários e desenvolvedores de aplicativos um método fácil para chegar a um ambiente de projeto de trabalho consistente.
Os problemas que o Pipenv procura resolver são multifacetados:
pip
e virtualenv
separadamente: eles trabalham juntos.requirements.txt
com hashes de pacote pode ser problemático. Pipenv usa Pipfile
e Pipfile.lock
para separar declarações abstratas de dependência da última combinação testada.$ pipenv graph
)..env
. Pipenv
Instalação
Características
Conceitos Básicos
Outros comandos
Conclusão do Shell
Uso
Exemplos de uso
Comandos
Localize o Projeto
Localize o virtualenv
Localize o interpretador Python
Instalar pacotes
Instalando a partir do git
Instale uma dependência de desenvolvimento
Mostrar um gráfico de dependência
Gerar um arquivo de bloqueio
Instale todas as dependências de desenvolvimento
Desinstale tudo
Use a casca
Documentação
Pipenv pode ser instalado com Python 3.7 e superior.
Para a maioria dos usuários, recomendamos instalar o Pipenv usando pip
:
pip install --user pipenv
Ou, se você estiver usando o FreeBSD:
pkg install py39-pipenv
Ou, se você estiver usando o Gentoo:
sudo emerge pipenv
Ou, se você estiver usando o Void Linux:
sudo xbps-install -S python3-pipenv
Alternativamente, alguns usuários preferem usar Pipx:
pipx install pipenv
Ou alguns usuários preferem usar o módulo Python pip
python -m pip install pipenv
Consulte a documentação para obter as instruções mais recentes.
?
pyenv
ou asdf
estiverem disponíveis.Pipfile
.Pipfile
, caso não exista.Pipfile
quando eles são instalados/desinstalados..env
, se existirem.Para referência de comando, consulte Comandos.
install
, todos os pacotes [packages]
especificados serão instalados. Para habilitar a conclusão em fish, adicione isto à sua configuração ~/.config/fish/completions/pipenv.fish
:
eval (env _PIPENV_COMPLETE=fish_source pipenv)
Há também um plugin fish, que ativará automaticamente seus subshells para você!
Alternativamente, com zsh, adicione isto à sua configuração ~/.zshrc
:
eval "$(_PIPENV_COMPLETE=zsh_source pipenv)"
Alternativamente, com o bash, adicione isto à sua configuração ~/.bashrc
ou ~/.bash_profile
:
eval "$(_PIPENV_COMPLETE=bash_source pipenv)"
As conclusões do Magic Shell agora estão habilitadas!
$ pipenv --help
Usage: pipenv [OPTIONS] COMMAND [ARGS]...
Options:
--where Output project home information.
--venv Output virtualenv information.
--py Output Python interpreter information.
--envs Output Environment Variable options.
--rm Remove the virtualenv.
--bare Minimal output.
--man Display manpage.
--support Output diagnostic information for use in
GitHub issues.
--site-packages / --no-site-packages
Enable site-packages for the virtualenv.
[env var: PIPENV_SITE_PACKAGES]
--python TEXT Specify which version of Python virtualenv
should use.
--clear Clears caches (pipenv, pip). [env var:
PIPENV_CLEAR]
-q, --quiet Quiet mode.
-v, --verbose Verbose mode.
--pypi-mirror TEXT Specify a PyPI mirror.
--version Show the version and exit.
-h, --help Show this message and exit.
Create a new project using Python 3.7, specifically:
$ pipenv --python 3.7
Remove project virtualenv (inferred from current directory):
$ pipenv --rm
Install all dependencies for a project (including dev):
$ pipenv install --dev
Create a lockfile containing pre-releases:
$ pipenv lock --pre
Show a graph of your installed dependencies:
$ pipenv graph
Check your installed dependencies for security vulnerabilities:
$ pipenv check
Install a local setup.py into your virtual environment/Pipfile:
$ pipenv install -e .
Use a lower-level pip command:
$ pipenv run pip freeze
check Checks for PyUp Safety security vulnerabilities and against
PEP 508 markers provided in Pipfile.
clean Uninstalls all packages not specified in Pipfile.lock.
graph Displays currently-installed dependency graph information.
install Installs provided packages and adds them to Pipfile, or (if no
packages are given), installs all packages from Pipfile.
lock Generates Pipfile.lock.
open View a given module in your editor.
requirements Generate a requirements.txt from Pipfile.lock.
run Spawns a command installed into the virtualenv.
scripts Lists scripts in current environment config.
shell Spawns a shell within the virtualenv.
sync Installs all packages specified in Pipfile.lock.
uninstall Uninstalls a provided package and removes it from Pipfile.
update Runs lock, then sync.
upgrade Update the lock of the specified dependency / sub-dependency,
but does not actually install the packages.
verify Verify the hash in Pipfile.lock is up-to-date.
$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test
$ pipenv --venv
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre
$ pipenv --py
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python
$ pipenv install
Creating a virtualenv for this project...
...
No package provided, installing all dependencies.
Virtualenv location: /Users/kennethreitz/.local/share/virtualenvs/test-EJkjoYts
Installing dependencies from Pipfile.lock...
...
To activate this project's virtualenv, run the following:
$ pipenv shell
Você pode instalar pacotes com pipenv do git e outros sistemas de controle de versão usando URLs formatados de acordo com a seguinte regra:
<vcs_type>+<scheme>://<location>/<user_or_organization>/<repository>@<branch_or_tag>#<package_name>
A única seção opcional é a seção @<branch_or_tag>
. Ao usar git sobre SSH, você pode usar o atalho vcs e o alias do esquema git+git@<location>:<user_or_organization>/<repository>@<branch_or_tag>#<package_name>
. Observe que isso é traduzido para git+ssh://git@<location>
quando analisado.
Os valores válidos para <vcs_type>
incluem git
, bzr
, svn
e hg
. Os valores válidos para <scheme>
incluem http,
, https
, ssh
e file
. Em casos específicos você também tem acesso a outros esquemas: svn
pode ser combinado com svn
como esquema, e bzr
pode ser combinado com sftp
e lp
.
Observe que é altamente recomendável que você instale quaisquer dependências controladas por versão no modo editável, usando pipenv install -e
, para garantir que a resolução da dependência possa ser executada com uma cópia atualizada do repositório sempre que for executada, e que inclui todas as dependências conhecidas.
Abaixo está um exemplo de uso que instala o repositório git localizado em https://github.com/requests/requests.git
da tag v2.19.1
como requests
de nome de pacote:
$ pipenv install -e git+https://github.com/requests/[email protected]#egg=requests
Creating a Pipfile for this project...
Installing -e git+https://github.com/requests/[email protected]#egg=requests...
[...snipped...]
Adding -e git+https://github.com/requests/[email protected]#egg=requests to Pipfile's [packages]...
[...]
Você pode ler mais sobre a implementação do suporte vcs pelo pip aqui.
$ pipenv install pytest --dev
Installing pytest...
...
Adding pytest to Pipfile's [dev-packages]...
$ pipenv graph
requests==2.18.4
- certifi [required: >=2017.4.17, installed: 2017.7.27.1]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.7, installed: 2.6]
- urllib3 [required: <1.23,>=1.21.1, installed: 1.22]
$ pipenv lock
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Note: your project now has only default [packages] installed.
To install [dev-packages], run: $ pipenv install --dev
$ pipenv install --dev
Pipfile found at /Users/kennethreitz/repos/kr/pip2/test/Pipfile. Considering this to be the project home.
Pipfile.lock out of date, updating...
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
$ pipenv uninstall --all
No package provided, un-installing all dependencies.
Found 25 installed package(s), purging...
...
Environment now purged and fresh!
$ pipenv shell
Loading .env environment variables...
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ ▯
Para entender os problemas que o Pipenv resolve, é útil mostrar como o gerenciamento de pacotes Python evoluiu.
Volte à primeira iteração do Python. Tínhamos Python, mas não havia uma maneira limpa de instalar pacotes.
Depois veio o Easy Install, um pacote que instala outros pacotes Python com relativa facilidade. Mas havia um porém: não era fácil desinstalar pacotes que não eram mais necessários.
Digite pip, com o qual a maioria dos usuários de Python está familiarizada. pip nos permite instalar e desinstalar pacotes. Poderíamos especificar versões, executar pip congelamento > requisitos.txt para gerar uma lista de pacotes instalados em um arquivo de texto e usar esse mesmo arquivo de texto para instalar tudo o que um aplicativo precisa com pip install -r requisitos.txt.
Mas o pip não incluiu uma maneira de isolar os pacotes uns dos outros. Poderíamos trabalhar em aplicativos que usam versões diferentes das mesmas bibliotecas, então precisávamos de uma maneira de habilitar isso.
Pipenv visa resolver vários problemas. Primeiro, o problema de precisar da biblioteca pip para instalação de pacotes, mais uma biblioteca para criar um ambiente virtual, mais uma biblioteca para gerenciar ambientes virtuais, mais todos os comandos associados a essas bibliotecas. Isso é muito para gerenciar. O Pipenv vem com gerenciamento de pacotes e suporte a ambiente virtual, para que você possa usar uma ferramenta para instalar, desinstalar, rastrear e documentar suas dependências e para criar, usar e organizar seus ambientes virtuais. Quando você inicia um projeto com ele, o Pipenv criará automaticamente um ambiente virtual para esse projeto, caso você ainda não esteja usando um.
Pipenv realiza esse gerenciamento de dependências abandonando a norma require.txt e trocando-a por um novo documento chamado Pipfile. Quando você instala uma biblioteca com Pipenv, um Pipfile para o seu projeto é atualizado automaticamente com os detalhes dessa instalação, incluindo informações de versão e possivelmente a localização do repositório Git, caminho do arquivo e outras informações.
Em segundo lugar, o Pipenv quer facilitar o gerenciamento de interdependências complexas.
Usar Pipenv, que fornece Pipfile, permite evitar esses problemas gerenciando dependências de diferentes ambientes para você. Este comando irá instalar as principais dependências do projeto:
instalação do pipenv
Adicionar a tag --dev instalará os requisitos de desenvolvimento/teste:
pipenv install --dev Para gerar um arquivo Pipfile.lock, execute:
bloqueio pipenv
Você também pode executar scripts Python com Pipenv. Para executar um script Python de nível superior chamado hello.py, execute:
pipenv execute python hello.py
E você verá o resultado esperado no console.
Para iniciar um shell, execute:
shell pipenv
Se você quiser converter um projeto que atualmente usa um arquivo requisitos.txt para usar o Pipenv, instale o Pipenv e execute:
requisitos de instalação do pipenv.txt
Isso criará um Pipfile e instalará os requisitos especificados.
A documentação reside em pipenv.pypa.io.