<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nova Script</title>
    <description>The latest articles on DEV Community by Nova Script (@novascript).</description>
    <link>https://dev.to/novascript</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F495886%2F29d9e534-ee61-4815-8a09-e251accad038.jpeg</url>
      <title>DEV Community: Nova Script</title>
      <link>https://dev.to/novascript</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/novascript"/>
    <language>en</language>
    <item>
      <title>Exemplificando um grande problema que o GraphQL resolve: overfetching.</title>
      <dc:creator>Nova Script</dc:creator>
      <pubDate>Thu, 03 Nov 2022 13:54:16 +0000</pubDate>
      <link>https://dev.to/novascript/exemplificando-um-grande-problema-que-o-graphql-resolve-overfetching-gh0</link>
      <guid>https://dev.to/novascript/exemplificando-um-grande-problema-que-o-graphql-resolve-overfetching-gh0</guid>
      <description>&lt;h2&gt;
  
  
  O problema:
&lt;/h2&gt;

&lt;p&gt;Imagine o seguinte cenário: você é dono de uma aplicação web qualquer que possui: uma API Rest e um frontend qualquer.&lt;/p&gt;

&lt;p&gt;No frontend, é dado uma ocasião onde você precisa mostrar pro usuário final uma lista contendo todos os nomes dos usuários que estão online naquele momento.&lt;/p&gt;

&lt;p&gt;Então, você faz uma requisição para a sua API, no endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /online_users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que retorna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
    {"name": "Hobbit", "email": "hobbit@csgo.com", "social": {"instagram": "@hobbit" ...}, ...},
    {"name": "Shiro", "email": "shiro@cloud9.com", "social": {"instagram": "@shiro" ...}, ...},
    {"name": "Groove", "email": "groove@gambit.com", "social": {"instagram": "@groove" ...}, ...},
    ...
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, perceba que para a ocasião dada, não precisamos de todos os dados que o nosso endpoint retorna (email, redes sociais e etc), mas sim apenas do nome de cada usuário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;É exatamente aí que o GraphQL começa a fazer sentido.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Com o GraphQL, é possível pedir ao backend para que o endpoint retorne APENAS as informações que você precisa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas porque não apenas ignorar os campos que não vou utilizar?
&lt;/h2&gt;

&lt;p&gt;Ainda no nosso cenário imaginado, veja também que a sua API está hospedada na AWS (Amazon Web Services).&lt;br&gt;
Nessa plataforma, você paga apenas pelos recursos que consome. Mais especificamente, você paga por tráfego: quanto maior a quantidade de informação (bytes) que trafega na sua API (recebimento e envio de dados), maior será o custo da sua aplicação no final do mês.&lt;/p&gt;

&lt;p&gt;Cada campo "ignorado" possui, portanto, um custo em dinheiro.&lt;/p&gt;

&lt;p&gt;Ainda, imagine que a sua aplicação web recebe milhares de visitantes por dia e, portanto, cada vez que você precisar mostrar para esses visitantes quem está online, você vá desperdiçando cada vez mais informação. &lt;/p&gt;

&lt;p&gt;Agora, imagine quantos outros endpoints existem dentro da sua aplicação e a quantidade de informação sendo "ignorada" pelo frontend. Multiplique isso pelo número de milhares de visitantes por dia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você verá, então, quanto dinheiro está sendo jogado fora.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O gasto de recursos aumenta significantemente à medida em que seu site aumenta a quantidade de clientes.&lt;/p&gt;

&lt;p&gt;Esse problema se chama &lt;strong&gt;overfetching&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ou seja:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O GraphQL permite que você peça ao back-end somente o que for utilizar, sem desperdiçar informação.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se gostou do conteúdo, não deixe de me apoiar com seu like aqui ou na rede social onde você o encontrou! ;D&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>overfetching</category>
      <category>programming</category>
      <category>aws</category>
    </item>
    <item>
      <title>[DOCKER] [NODE]: Como 'buildar' a node_modules só quando for necessário!</title>
      <dc:creator>Nova Script</dc:creator>
      <pubDate>Mon, 26 Sep 2022 13:34:35 +0000</pubDate>
      <link>https://dev.to/novascript/docker-node-como-buildar-a-nodemodules-so-quando-for-necessario-3655</link>
      <guid>https://dev.to/novascript/docker-node-como-buildar-a-nodemodules-so-quando-for-necessario-3655</guid>
      <description>&lt;h2&gt;
  
  
  Introdução:
&lt;/h2&gt;

&lt;p&gt;Nem todas as vezes que mudamos nosso código, isso significa que nós implementamos &lt;em&gt;novas dependências&lt;/em&gt;: se não inserimos nenhum pacote novo no nosso projeto, então não há motivo algum para reconstruir (rebuild) a pasta &lt;code&gt;node_modules&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Então, vamos entender como melhorar nossa &lt;strong&gt;eficiência&lt;/strong&gt;, já que nosso tempo de &lt;strong&gt;debugging e desenvolvimento&lt;/strong&gt; para aplicações Node rodando Docker será significantemente reduzido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como Node Dockerfiles são implementados normalmente:
&lt;/h2&gt;

&lt;p&gt;Vamos olhar rapidinho esse &lt;code&gt;Dockerfile&lt;/code&gt; que está &lt;strong&gt;mal&lt;/strong&gt; implementado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:16

# Cria diretório do aplicativo
WORKDIR /usr/src/app

# Copia o código inteiro
COPY . .

# Instala as dependências
RUN npm install

# Roda o servidor
EXPOSE 8080
CMD [ "node", "server.js" ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todo o problema de eficiência aqui reside &lt;br&gt;
na linha &lt;code&gt;COPY . .&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Isso é &lt;strong&gt;ruim&lt;/strong&gt;, pois fazer isso significa que: todas as vezes que você fizer uma mudança no código presente em &lt;code&gt;.&lt;/code&gt;, a pasta &lt;code&gt;node_modules&lt;/code&gt; terá que ser reconstruída, de novo e de novo e de novo...&lt;/p&gt;
&lt;h2&gt;
  
  
  Arrumando isso:
&lt;/h2&gt;

&lt;p&gt;Ao invés disso, nós devemos &lt;strong&gt;primeiramente&lt;/strong&gt;  copiar &lt;em&gt;apenas&lt;/em&gt; nosso arquivo &lt;code&gt;package.json&lt;/code&gt; e &lt;code&gt;package-lock.json&lt;/code&gt; (que controlam nossas dependências) para o diretório do aplicativo e então instalar elas.&lt;/p&gt;

&lt;p&gt;Então, vamos atualizar nosso &lt;code&gt;Dockerfile&lt;/code&gt; para:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Copia package.json e package-lock.json
COPY package*.json ./

# Instala as dependências
RUN npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E só então, copiamos o resto dos nossos arquivos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COPY . .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, &lt;strong&gt;nossa versão corrigida do Dockerfile&lt;/strong&gt; será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:16

# Cria diretório do aplicativo
WORKDIR /usr/src/app

# Copia package.json e package-lock.json
COPY package*.json ./

# Instala as dependências
RUN npm install

# Copiamos o resto dos arquivos
COPY . .

# Roda o servidor
EXPOSE 8080
CMD [ "node", "server.js" ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explicação:
&lt;/h2&gt;

&lt;p&gt;É tudo sobre &lt;strong&gt;camadas cacheadas do Docker&lt;/strong&gt;, ou &lt;strong&gt;Docker cached layers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cada imagem do Docker consiste de uma série de camadas.&lt;/p&gt;

&lt;p&gt;Comandos no seu &lt;code&gt;Dockerfile&lt;/code&gt; vão gerar novas camadas.&lt;/p&gt;

&lt;p&gt;Ao invés de manter tudo dentro de uma só camada, nós devemos quebrar em partes diferentes.&lt;/p&gt;

&lt;p&gt;Pois &lt;strong&gt;o Docker sempre vai tentar usar uma camada que já existe, ao invés de criar uma nova&lt;/strong&gt;, se for possível.&lt;/p&gt;

&lt;p&gt;Essa é a explicação simples e rápida.&lt;br&gt;
Você pode ler mais detalhes na &lt;a href="https://docs.docker.com/storage/storagedriver/"&gt;documentação oficial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão:
&lt;/h2&gt;

&lt;p&gt;Agora, toda vez que modificarmos a &lt;code&gt;package.json&lt;/code&gt;, o comando &lt;code&gt;npm install&lt;/code&gt; será executado novamente.&lt;br&gt;
Caso não modifiquemos, então essa etapa será simplesmente ignorada.&lt;/p&gt;

&lt;p&gt;Você pode verificar esse comportamento no log da imagem, procurando por &lt;code&gt;---&amp;gt; Using cache&lt;/code&gt;, que indica que a pasta &lt;code&gt;node_modules&lt;/code&gt; não está sendo reconstruída.&lt;/p&gt;

&lt;h1&gt;
  
  
  Gostou do post? :D
&lt;/h1&gt;

&lt;p&gt;Se você gostou, por favor considere me seguir ou favoritar esse post! &lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>node</category>
      <category>docker</category>
    </item>
    <item>
      <title>[DOCKER] [NODE]: How to rebuild node_modules only when it's necessary!</title>
      <dc:creator>Nova Script</dc:creator>
      <pubDate>Mon, 26 Sep 2022 13:15:59 +0000</pubDate>
      <link>https://dev.to/novascript/docker-node-how-to-rebuild-nodemodules-only-when-its-necessary-4ke9</link>
      <guid>https://dev.to/novascript/docker-node-how-to-rebuild-nodemodules-only-when-its-necessary-4ke9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;Not everytime we change our code it means that we have implemented &lt;em&gt;new dependencies&lt;/em&gt;: if we have not inserted a new package into our project, &lt;strong&gt;there's no reason at all to rebuild &lt;code&gt;node_modules&lt;/code&gt; folder&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So let's understand how we can upgrade our &lt;strong&gt;efficiency&lt;/strong&gt;, as your &lt;strong&gt;development and debugging time&lt;/strong&gt; for Node applications running Docker will be significantly reduced.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Node Dockerfiles are usually implemented:
&lt;/h2&gt;

&lt;p&gt;Let's take a fast look at this usually seen &lt;code&gt;Dockerfile&lt;/code&gt;, which is &lt;strong&gt;bad&lt;/strong&gt; implemented.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Copy source
COPY . .

# Install dependencies
RUN npm install

# Run server
EXPOSE 8080
CMD [ "node", "server.js" ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The whole efficiency problem here is located at &lt;code&gt;COPY . .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;bad&lt;/strong&gt;. Doing so will result in: everytime we make a change to a file in &lt;code&gt;.&lt;/code&gt;, our modules folder will have to be built again and again and again...&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixing it:
&lt;/h2&gt;

&lt;p&gt;Instead, we should &lt;strong&gt;firstly&lt;/strong&gt; &lt;em&gt;only&lt;/em&gt; copy our &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;package-lock.json&lt;/code&gt; files (which controls our dependencies) to our working directory and then install  them.&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;let's update our Dockerfile&lt;/strong&gt; to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And only then, we can copy the rest of our files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COPY . .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, our &lt;strong&gt;fixed Dockerfile&lt;/strong&gt; version will be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy source
COPY . .

# Run server
EXPOSE 8080
CMD [ "node", "server.js" ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explanation:
&lt;/h2&gt;

&lt;p&gt;It's all about Docker &lt;strong&gt;cached layers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each Docker image consists of a series of layers.&lt;/p&gt;

&lt;p&gt;Commands in your &lt;code&gt;Dockerfile&lt;/code&gt; will always generate new layers.&lt;/p&gt;

&lt;p&gt;Instead of keeping everything within only one layer, we should break it on different parts.&lt;/p&gt;

&lt;p&gt;Because &lt;strong&gt;Docker will try to use an existent cached layer on rebuild&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's the simple explanation.&lt;br&gt;
You can read the details on &lt;a href="https://docs.docker.com/storage/storagedriver/"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;Now, everytime &lt;code&gt;package.json&lt;/code&gt; file changes, &lt;code&gt;npm install&lt;/code&gt; will be runned again. Otherwise, it will be simply skipped.&lt;/p&gt;

&lt;p&gt;You can check this behavior on your log: just look for &lt;code&gt;---&amp;gt; Using cache&lt;/code&gt;, which indicates &lt;code&gt;node_modules&lt;/code&gt; is not being rebuilded.&lt;/p&gt;

&lt;h1&gt;
  
  
  Liked this post? ;D
&lt;/h1&gt;

&lt;p&gt;If you do, please consider following me or favoriting this post!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>node</category>
      <category>docker</category>
    </item>
    <item>
      <title>GIT TIPS: Creating a new empty branch</title>
      <dc:creator>Nova Script</dc:creator>
      <pubDate>Mon, 11 Apr 2022 20:22:27 +0000</pubDate>
      <link>https://dev.to/novascript/git-tips-creating-a-new-empty-branch-27n</link>
      <guid>https://dev.to/novascript/git-tips-creating-a-new-empty-branch-27n</guid>
      <description>&lt;h1&gt;
  
  
  When to create a new empty branch?
&lt;/h1&gt;

&lt;p&gt;Sometimes, it can be very useful to create a new empty branch on &lt;code&gt;git&lt;/code&gt;. For example, imagine the following scenario: you are working on a website project but you also want to keep a good documentation aside, in the same repository. So, in order to keep things minimally separated, you can create a brand new branch called &lt;code&gt;docs&lt;/code&gt; and keep your website code at another branch called &lt;code&gt;develop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That way, &lt;strong&gt;you can always easily change from one workspace to another&lt;/strong&gt; (changing branches) and also keep everything inside your &lt;em&gt;repository&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to create it?
&lt;/h1&gt;

&lt;p&gt;It's simple: let's execute the command &lt;code&gt;git checkout&lt;/code&gt;, in order to change to another branch. Also, we're going to use the &lt;code&gt;--orphan&lt;/code&gt; flag, which is going to be responsible for creating a branch with &lt;em&gt;empty commits on it&lt;/em&gt; (you can &lt;code&gt;git log&lt;/code&gt; in order to verify this, after creating the branch).&lt;/p&gt;

&lt;p&gt;Also, we must give the branch a name right after the &lt;code&gt;--orphan&lt;/code&gt; flag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout --orphan &amp;lt;branch_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, your project files from the previous branch you were working at will still be there. But they will be there just as &lt;code&gt;untracked&lt;/code&gt; files and they can be easily removed by executing the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --hard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When using the &lt;code&gt;--hard&lt;/code&gt; flag, &lt;code&gt;git reset&lt;/code&gt; will be responsible for destroying any changes you've made in your branch files, compared to the last HEAD commit (last commit you've made). Since our branch is empty and has &lt;strong&gt;no commits&lt;/strong&gt; on it, all the files are going to be instantly removed.&lt;/p&gt;

&lt;h1&gt;
  
  
  Switching back to another branch:
&lt;/h1&gt;

&lt;p&gt;After creating a commit in your new branch, it will be visible in your branch list, which you can check by using the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, you can switch between any branches by using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout &amp;lt;branch_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Enjoyed it?
&lt;/h1&gt;

&lt;p&gt;Please, like this post and follow me on social media!&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>programming</category>
      <category>github</category>
    </item>
    <item>
      <title>Desinstalando dependências inutilizadas em Python com o PIP.</title>
      <dc:creator>Nova Script</dc:creator>
      <pubDate>Fri, 27 Nov 2020 16:33:26 +0000</pubDate>
      <link>https://dev.to/novascript/desinstalando-dependencias-inutilizadas-em-python-com-o-pip-25kd</link>
      <guid>https://dev.to/novascript/desinstalando-dependencias-inutilizadas-em-python-com-o-pip-25kd</guid>
      <description>&lt;h2&gt;
  
  
  Introdução:
&lt;/h2&gt;

&lt;p&gt;Acontece: durante o desenvolvimento do seu projeto, alguns pacotes foram instalados — e possivelmente utilizados — mas hoje não são úteis e você precisa removê-los para acelerar o desempenho do Software e tornar o código enxuto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atenção! Seu projeto deve conter um arquivo

&lt;code&gt;requirements.txt&lt;/code&gt;

;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;É essencial que o seu projeto esteja rodando em um ambiente virtual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso esse artigo tenha te ajudado, compartilhe!&lt;/p&gt;

&lt;h1&gt;
  
  
  Como Fazer:
&lt;/h1&gt;

&lt;p&gt;Para performar a “limpeza”, utilizaremos o pacote &lt;code&gt;pip-check-reqs&lt;/code&gt;, ele vai varrer todo o código fonte do nosso projeto buscando por todas as importações presentes. Depois de criar uma árvore de dependências, ele verificará se existem dependências extras presentes no arquivo &lt;code&gt;requirements.txt&lt;/code&gt; e as mostrará — caso existam.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ative seu ambiente virtual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instale o pip-check-reqs:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install pip-check-reqs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Depois, dispare o procedimento com o comando:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip-extra-reqs .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, ele mostrará em seu terminal todos os pacotes extras (não utilizados).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy82gdlrspn2xqnz5nkip.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fy82gdlrspn2xqnz5nkip.jpeg" alt="Imagem do terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pronto! Agora é só remover essas dependências do seu &lt;code&gt;requirements.txt&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Como Testar:
&lt;/h1&gt;

&lt;p&gt;Para testar se o seu projeto ainda funciona normalmente após a retirada desses pacotes, você pode:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Desinstalar todos os pacotes previamente instalados:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip freeze | xargs pip uninstall -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.Reinstalar a nova lista de pacotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Rodar o projeto e verificar a ausência de erros!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>tutorial</category>
      <category>python</category>
    </item>
  </channel>
</rss>
