{"id":511,"date":"2019-10-22T14:37:44","date_gmt":"2019-10-22T17:37:44","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=511"},"modified":"2019-10-22T14:37:46","modified_gmt":"2019-10-22T17:37:46","slug":"devops-com-python-2","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/devops-com-python-2\/","title":{"rendered":"DevOps com Python #2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Pip<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma ferramenta b\u00e1sica para\nempacotamento para Python \u00e9 o pip. Por padr\u00e3o a instala\u00e7\u00e3o do Python n\u00e3o vem\ncom o pip. Isto possibilita o pip ser mais r\u00e1pido que a ferramenta padr\u00e3o do Python\ne uma alternativa de implementa\u00e7\u00e3o como o PyPy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contudo, eles est\u00e3o dispon\u00edveis\nno m\u00f3dulo ensurepip. Isto permite o acesso ao pip via ensurepip python -m. \u00c9 um\njeito f\u00e1cil de conseguir estas ferramentas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O ensurepip \u00e9 um pacote que d\u00e1\nsuporte ao instalador do pip que vem com a instala\u00e7\u00e3o do Python ou em um ambiente\nvirtual.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas instala\u00e7\u00f5es Python\ndesabilitam ensurepip. Quando n\u00e3o h\u00e1 ensurepip, h\u00e1 um jeito de instalar manualmente:\nget-pip.py. \u00c9 feito o download de um arquivo e quando terminado ser\u00e1 desempacotado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pip \u00e9 o \u00fanico pacote que\nprecisa deste comando para instalar. Todos os outros pacotes podem, e poderiam\nser instalados utilizando o pip. O upgrading do pip pode ser feito com o\ncomando pip install &#8211;upgrade pip.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dependendo como o Python foi\ninstalado, em um \u201cambiente real\u201d pode ou n\u00e3o pode ser modificado pelo nosso usu\u00e1rio.\nEm v\u00e1rios arquivos README e blogs encorajam o comando sudo pip install. Este \u00e9\nquase sempre o m\u00e9todo errado de fazer: isto ir\u00e1 instalar os pacotes de forma\nglobal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 quase sempre melhor instalar\nem um ambiente virtual. Como medida tempor\u00e1ria, talvez instalar o que precisa\nem um ambiente virtual somente para o nosso usu\u00e1rio. O comando seria pip\ninstall &#8211;user.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O comando pip install ir\u00e1\nfazer o download e instalar todas as depend\u00eancias. Contudo, pode haver alguma falha\ncaso precise fazer um downgrade de alguns pacotes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel instalar a vers\u00e3o\nexpl\u00edcita: pip install package-name==&lt;vers\u00e3o&gt; isto ir\u00e1 instalar a vers\u00e3o\nespec\u00edfica. Esta tamb\u00e9m \u00e9 uma boa maneira para adquirir apenas os pacotes que j\u00e1\nest\u00e3o no formato final, e n\u00e3o vers\u00f5es betas, teste ou similares.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se o wheel estiver instalado,\npip ir\u00e1 compilar usando o cache do pacote wheels. Isto \u00e9 especialmente \u00fatil\nquando estiver em um ambiente virtual, desde que instalado o cached wheel. Isto\n\u00e9 \u00fatil quando usar os pacotes \u201cnativos\u201d ou \u201cbin\u00e1rios\u201d que s\u00e3o compilados com o\nC. O wheel cache elimina a necessidade e compilar o programa de novo. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pip permite desinstala\u00e7\u00e3o,\nusando o comando pip uninstall. Este comando por padr\u00e3o requer uma confirma\u00e7\u00e3o\nmanual. Exceto por circunst\u00e2ncias ex\u00f3ticas, este comando n\u00e3o \u00e9 utilizado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se h\u00e1 um pacote que n\u00e3o deveria\nest\u00e1 l\u00e1, o normal seria destruir todo o ambiente e recri\u00e1-lo. Por raz\u00f5es\nsimilares o pip install \u2013upgrade muitas vezes n\u00e3o \u00e9 utilizado, o correto \u00e9\ndestruir todo o ambiente e recri\u00e1-lo. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e1 apenas uma situa\u00e7\u00e3o onde \u00e9\numa boa ideia utilizar o pip install &#8211;upgrade pip. Somente quando precisar\natualizar o pip para uma nova vers\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pip install fornece o \u201crequirements file\u201d, pip install\n\u2013requirements ou pip install -r (<a href=\"https:\/\/jtemporal.com\/requirements-txt\/\">https:\/\/jtemporal.com\/requirements-txt\/<\/a>). Um arquivo requirements simplesmente tem um pacote\npor linha. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isto n\u00e3o \u00e9 diferente de especificar\nos pacotes por meio de comando de linhas. Contudo, arquivos requirements muitas\nvezes especifica \u201cstrict dependencies\u201d. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um arquivo requirements pode\nser gerado a partir de um ambiente com pip freeze. O caminho normal para gerar\no arquivo requirements em um ambiente virtual \u00e9 o seguinte:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">pip install -e<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">pip freeze &gt; requirements.txt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isto produz o arquivo requirements com a lista dos pacotes com a vers\u00e3o espec\u00edfica.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"212\" height=\"205\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/10\/image.png\" alt=\"\" class=\"wp-image-512\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">DevOps&nbsp;in Python:&nbsp;Infrastructure&nbsp;as Python&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/amzn.to\/2XGuc9t\">https:\/\/amzn.to\/2XGuc9t<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O projeto f\u00eanix&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/amzn.to\/2xxsZSV\">https:\/\/amzn.to\/2xxsZSV<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\ude04&nbsp;Curso de Linux \u2013 Administra\u00e7\u00e3o Total do Sistema Operacional&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&gt;&gt;&gt;&nbsp;<a rel=\"noreferrer noopener\" href=\"http:\/\/bit.ly\/blacklinux\" target=\"_blank\">http:\/\/bit.ly\/blacklinux<\/a>&nbsp;&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pip Uma ferramenta b\u00e1sica para empacotamento para Python \u00e9 o pip. Por padr\u00e3o a instala\u00e7\u00e3o do Python n\u00e3o vem com o pip. Isto possibilita o pip ser mais r\u00e1pido que a ferramenta padr\u00e3o do Python e uma alternativa de implementa\u00e7\u00e3o como o PyPy. Contudo, eles est\u00e3o dispon\u00edveis no m\u00f3dulo ensurepip. Isto permite o acesso ao [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":171,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[],"class_list":["post-511","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=511"}],"version-history":[{"count":1,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/511\/revisions"}],"predecessor-version":[{"id":513,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/511\/revisions\/513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/171"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}