SlideShare uma empresa Scribd logo
1 de 47
Gerenciamento de
dependências em Python
@patrickporto
Patrick Porto
● Pythonista há 6 anos
● Graduando em Ciência da
Computação
● Engenheiro de Software
Sênior na Stone
Pagamentos
Como instalar uma
dependência no
Python?
Instalação de dependência no Python
pip install django
Como instalar várias
dependências no
Python?
Instalação de várias dependências
$ pip install django
$ pip install gunicorn
$ pip install pytest
[...]
Requirements.txt
Anatomia de um requirements.txt
django >= 1.11
gunicorn ~= 19.4.5
pytest
Como posso
separar as minha
dependências por
ambiente?
Estrutura de Projeto (two scoops)
● requirements/base.txt
● requirements/local.txt
● requirements/production.txt
● requirements/test.txt
● requirements.txt
Como posso ter
diferentes
dependência para
vários projetos?
Virtualenv
Criação de virtualenv
$ virtualenv env
$ envScriptsactivate
$ (env) pip install -r requirements.txt
Problema #1
Como obter as
versões exatas das
dependências do
projeto?
Problema #2
Como posso ter
uma lista das
dependências em
alto nível?
Pipenv
Instalação do Pipenv
pip install pipenv
Instalação de dependência pelo Pipenv
pipenv install django
Instalação de dependência pelo Pipenv
Creating a virtualenv for this project…
Installing setuptools, pip, wheel...done.
Virtualenv location: ~.virtualenvs<NOME_DA_SUA_VIRTUALENV>
Creating a Pipfile for this project…
Installing django…
Adding django to Pipfile's [packages]…
PS: You have excellent taste!
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (2f8679)!
Instalação de dependência pelo Pipenv
pipenv install pytest --dev
Executação de comandos pela virtualenv
pipenv run django-admin startproject meusite
Ativação da virtualenv
pipenv shell
Pipfile
Estrutura de um projeto com pipenv
● Pipfile - dependências de alto nível
● Pipfile.lock - dependências com suas versões exatas
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = "*"
[requires]
python_version = "3.4"
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = "*"
[requires]
python_version = "3.4"
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = "*"
[requires]
python_version = "3.4"
$ pipenv install pytest --dev
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = "*"
[requires]
python_version = "3.4"
$ pipenv install django
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = ">1.10"
[requires]
python_version = "3.4"
PEP 440
PEP 440
django ~= 1.10 Versão compatível
django == 1.10 Versão correspondente
django != 1.10 Versão diferente
django <= 1.10 Versão igual ou inferior
django >= 1.10 Versão superior ou igual
django < 1.10 Versão inferior
django > 1.10 Versão superior
Anatomia de um Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
[packages]
django = ">1.10"
[requires]
python_version = "3.4"
PEP 508
PEP 508
python_version = “3.6” Versão do python
platform_python_implementation = “CPython” Implementação do python
platform_system = “Linux” Sistema operacional
platform_machine = “x86_64” Arquitetura do processador
pipenv (avançado)
Versionamento do Python
pipenv install
Versionamento do Python
$ pipenv install
Warning: Python 3.6 was not found on your system…
Would you like us to install latest CPython 3.6 with pyenv? [Y/n]: y
Installing CPython 3.6.2 with pyenv (this may take a few minutes)…
...
Making Python installation global…
Creating a virtualenv for this project…
Using ~/.pyenv/shims/python3 to create virtualenv…
...
No package provided, installing all dependencies.
...
Installing dependencies from Pipfile.lock…
================================ 5/5 — 00:00:03
To activate this project's virtualenv, run the following:
$ pipenv shell
Instalação de dependências no sistema
pipenv install --system --deploy
Detecção de vulnerabilidades
pipenv check
Detecção de vulnerabilidades
$ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
33075: django >=1.10,<1.10.3 resolved (1.10.1 installed)!
Django before 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3, when
settings.DEBUG is True, allow remote attackers to conduct DNS rebinding attacks by
leveraging failure to validate the HTTP Host header against settings.ALLOWED_HOSTS.
33076: django >=1.10,<1.10.3 resolved (1.10.1 installed)!
Django 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3 use a hardcoded
password for a temporary database user created when running tests with an Oracle database,
which makes it easier for remote attackers to obtain access to the database server by
leveraging failure to manually specify a password in the database settings TEST dictionary.
Verificação de Code Style
pipenv check --style app.py
Verificação de Code Style
$ pipenv check --style app.py
app.py:1:1: F401 'requests' imported but unused
app.py:1:16: W292 no newline at end of file
Abrir uma dependência no seu editor
pipenv open django
Visualização de dependências aninhadas
pipenv graph
Visualização de dependências aninhadas
$ pipenv graph
Django==1.11.6
- pytz [required: Any, installed: 2017.2]
requests==2.18.4
- certifi [required: >=2017.4.17, installed: 2017.7.27.1]
- chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
- idna [required: >=2.5,<2.7, installed: 2.6]
- urllib3 [required: <1.23,>=1.21.1, installed: 1.22]
Geração de requirements.txt
pipenv lock -r > requirements.txt
Dúvidas?
Referências
● https://www.kennethreitz.org/essays/a-better-pip-workflow
● https://medium.com/@patrickporto/introdução-ao-pipenv-49aa9685dfe4
● https://github.com/pypa/pipfile
● https://github.com/kennethreitz/pipenv
● https://docs.pipenv.org
Obrigado!
Medium: @PatrickPorto
Twitter: @patrickporto
Telegram: @patrickporto
Email: patrick.s.porto@gmail.com

Mais conteúdo relacionado

Mais procurados

Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Victor Souza
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Hélio Medeiros
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoArtur Felipe Sousa
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 

Mais procurados (11)

Virtualenv e Pip
Virtualenv e PipVirtualenv e Pip
Virtualenv e Pip
 
Docker volumes
Docker volumesDocker volumes
Docker volumes
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Fabric
FabricFabric
Fabric
 
Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 

Semelhante a Gerenciamento de dependências em Python com Pipenv

Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-toolunifesptk
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterWilson Lopes
 
Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Wilson Lopes
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
Funtoo Gnu/Linux: Customização ao extremo
Funtoo Gnu/Linux: Customização ao extremoFuntoo Gnu/Linux: Customização ao extremo
Funtoo Gnu/Linux: Customização ao extremoDaniel
 
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCOficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCMauro Risonho de Paula Assumpcao
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Funtoo escla
Funtoo esclaFuntoo escla
Funtoo esclaDaniel
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!Gdg quality fest 2018 - Metralhando o próprio produto com tudo!
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!Flávio Pimenta
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Construindo um data warehouse com Pentaho e Docker
Construindo um data warehouse com Pentaho e DockerConstruindo um data warehouse com Pentaho e Docker
Construindo um data warehouse com Pentaho e DockerWellington Marinho
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
Extraindo métricas em testes de performance
 Extraindo métricas em testes de performance Extraindo métricas em testes de performance
Extraindo métricas em testes de performanceFlávio Pimenta
 

Semelhante a Gerenciamento de dependências em Python com Pipenv (20)

Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-tool
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de Datacenter
 
Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Funtoo Gnu/Linux: Customização ao extremo
Funtoo Gnu/Linux: Customização ao extremoFuntoo Gnu/Linux: Customização ao extremo
Funtoo Gnu/Linux: Customização ao extremo
 
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCOficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Funtoo escla
Funtoo esclaFuntoo escla
Funtoo escla
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!Gdg quality fest 2018 - Metralhando o próprio produto com tudo!
Gdg quality fest 2018 - Metralhando o próprio produto com tudo!
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Começando no Pentaho
Começando no PentahoComeçando no Pentaho
Começando no Pentaho
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Construindo um data warehouse com Pentaho e Docker
Construindo um data warehouse com Pentaho e DockerConstruindo um data warehouse com Pentaho e Docker
Construindo um data warehouse com Pentaho e Docker
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
Extraindo métricas em testes de performance
 Extraindo métricas em testes de performance Extraindo métricas em testes de performance
Extraindo métricas em testes de performance
 

Gerenciamento de dependências em Python com Pipenv

  • 1. Gerenciamento de dependências em Python @patrickporto
  • 2. Patrick Porto ● Pythonista há 6 anos ● Graduando em Ciência da Computação ● Engenheiro de Software Sênior na Stone Pagamentos
  • 4. Instalação de dependência no Python pip install django
  • 6. Instalação de várias dependências $ pip install django $ pip install gunicorn $ pip install pytest [...]
  • 8. Anatomia de um requirements.txt django >= 1.11 gunicorn ~= 19.4.5 pytest
  • 9. Como posso separar as minha dependências por ambiente?
  • 10. Estrutura de Projeto (two scoops) ● requirements/base.txt ● requirements/local.txt ● requirements/production.txt ● requirements/test.txt ● requirements.txt
  • 11. Como posso ter diferentes dependência para vários projetos?
  • 13. Criação de virtualenv $ virtualenv env $ envScriptsactivate $ (env) pip install -r requirements.txt
  • 14. Problema #1 Como obter as versões exatas das dependências do projeto?
  • 15. Problema #2 Como posso ter uma lista das dependências em alto nível?
  • 17. Instalação do Pipenv pip install pipenv
  • 18. Instalação de dependência pelo Pipenv pipenv install django
  • 19. Instalação de dependência pelo Pipenv Creating a virtualenv for this project… Installing setuptools, pip, wheel...done. Virtualenv location: ~.virtualenvs<NOME_DA_SUA_VIRTUALENV> Creating a Pipfile for this project… Installing django… Adding django to Pipfile's [packages]… PS: You have excellent taste! Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (2f8679)!
  • 20. Instalação de dependência pelo Pipenv pipenv install pytest --dev
  • 21. Executação de comandos pela virtualenv pipenv run django-admin startproject meusite
  • 24. Estrutura de um projeto com pipenv ● Pipfile - dependências de alto nível ● Pipfile.lock - dependências com suas versões exatas
  • 25. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = "*" [requires] python_version = "3.4"
  • 26. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = "*" [requires] python_version = "3.4"
  • 27. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = "*" [requires] python_version = "3.4" $ pipenv install pytest --dev
  • 28. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = "*" [requires] python_version = "3.4" $ pipenv install django
  • 29. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = ">1.10" [requires] python_version = "3.4" PEP 440
  • 30. PEP 440 django ~= 1.10 Versão compatível django == 1.10 Versão correspondente django != 1.10 Versão diferente django <= 1.10 Versão igual ou inferior django >= 1.10 Versão superior ou igual django < 1.10 Versão inferior django > 1.10 Versão superior
  • 31. Anatomia de um Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true [dev-packages] pytest = "*" [packages] django = ">1.10" [requires] python_version = "3.4" PEP 508
  • 32. PEP 508 python_version = “3.6” Versão do python platform_python_implementation = “CPython” Implementação do python platform_system = “Linux” Sistema operacional platform_machine = “x86_64” Arquitetura do processador
  • 35. Versionamento do Python $ pipenv install Warning: Python 3.6 was not found on your system… Would you like us to install latest CPython 3.6 with pyenv? [Y/n]: y Installing CPython 3.6.2 with pyenv (this may take a few minutes)… ... Making Python installation global… Creating a virtualenv for this project… Using ~/.pyenv/shims/python3 to create virtualenv… ... No package provided, installing all dependencies. ... Installing dependencies from Pipfile.lock… ================================ 5/5 — 00:00:03 To activate this project's virtualenv, run the following: $ pipenv shell
  • 36. Instalação de dependências no sistema pipenv install --system --deploy
  • 38. Detecção de vulnerabilidades $ pipenv check Checking PEP 508 requirements… Passed! Checking installed package safety… 33075: django >=1.10,<1.10.3 resolved (1.10.1 installed)! Django before 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3, when settings.DEBUG is True, allow remote attackers to conduct DNS rebinding attacks by leveraging failure to validate the HTTP Host header against settings.ALLOWED_HOSTS. 33076: django >=1.10,<1.10.3 resolved (1.10.1 installed)! Django 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3 use a hardcoded password for a temporary database user created when running tests with an Oracle database, which makes it easier for remote attackers to obtain access to the database server by leveraging failure to manually specify a password in the database settings TEST dictionary.
  • 39. Verificação de Code Style pipenv check --style app.py
  • 40. Verificação de Code Style $ pipenv check --style app.py app.py:1:1: F401 'requests' imported but unused app.py:1:16: W292 no newline at end of file
  • 41. Abrir uma dependência no seu editor pipenv open django
  • 42. Visualização de dependências aninhadas pipenv graph
  • 43. Visualização de dependências aninhadas $ pipenv graph Django==1.11.6 - pytz [required: Any, installed: 2017.2] requests==2.18.4 - certifi [required: >=2017.4.17, installed: 2017.7.27.1] - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4] - idna [required: >=2.5,<2.7, installed: 2.6] - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]
  • 44. Geração de requirements.txt pipenv lock -r > requirements.txt
  • 46. Referências ● https://www.kennethreitz.org/essays/a-better-pip-workflow ● https://medium.com/@patrickporto/introdução-ao-pipenv-49aa9685dfe4 ● https://github.com/pypa/pipfile ● https://github.com/kennethreitz/pipenv ● https://docs.pipenv.org
  • 47. Obrigado! Medium: @PatrickPorto Twitter: @patrickporto Telegram: @patrickporto Email: patrick.s.porto@gmail.com