SlideShare uma empresa Scribd logo
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

PDF
Ruby
PDF
Virtualenv e Pip
PPTX
Pip - Instalando Pacotes facilmente para Python
PDF
Container revolucao
PPT
Python para programadores Ruby
PDF
EIIFRO2014 - Desenvolvimento Colaborativo de Software
PDF
Nossa experiência com TDD
PDF
TDD - Test Driven Development (em PHP)
Ruby
Virtualenv e Pip
Pip - Instalando Pacotes facilmente para Python
Container revolucao
Python para programadores Ruby
EIIFRO2014 - Desenvolvimento Colaborativo de Software
Nossa experiência com TDD
TDD - Test Driven Development (em PHP)

Mais procurados (11)

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

Semelhante a Gerenciamento de dependências em python (20)

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

Último (7)

PDF
apresentacao introducao computacao ead.pdf
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
apresentacao introducao computacao ead.pdf
Evolução em código: algoritmos genéticos com PHP
Mapeamento de Objeto para Tabela Relacional
Dos requisitos ao código: como criar código rastreável em PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO

Gerenciamento de dependências em python

  • 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