Como instalar pacotes usando pip de acordo com o arquivo requirements.txt de um diretório local?


1083

Aqui está o problema

Eu tenho um requirements.txt que se parece com:

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3
...

Eu tenho um diretório de arquivo local contendo todos os pacotes + outros.

Eu criei um novo virtualenv com

bin/virtualenv testing

ao ativá-lo, tentei instalar os pacotes de acordo com o requirements.txt do diretório de arquivamento local.

source bin/activate
pip install -r /path/to/requirements.txt -f file:///path/to/archive/

Eu recebi alguma saída que parece indicar que a instalação está boa

Downloading/unpacking Fabric==1.2.0 (from -r ../testing/requirements.txt (line 3))
  Running setup.py egg_info for package Fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking South==0.7.3 (from -r ../testing/requirements.txt (line 8))
  Running setup.py egg_info for package South
....

Mas a verificação posterior revelou que nenhum pacote está instalado corretamente. Não consigo importar o pacote e nenhum é encontrado no diretório de pacotes do site do meu virtualenv. Então, o que deu errado?


4
Você já tentou usar --no-indexpara que nem sequer olhe para o PyPI?
Hugo Tavares

2
Você cortou a mensagem de erro. Geralmente é perto do fundo.
bukzor

Você pode usar os caminhos do arquivo em vez dos nomes dos pacotes, isso significa que precisará alterar o arquivo requirements.txt, mas mantenha o comando pip install o mesmo.
Asafge

9
A resposta mais votada (a de Mike Lyons) nem sequer responde à pergunta . Você poderia aceitar a resposta do codeape, que é a correta?
Piotr Dobrogost

2
surpreendido ninguém mais ligados, mas pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

Respostas:


787

Isso funciona para mim:

$ pip install -r requirements.txt --no-index --find-links file:///tmp/packages

--no-index- Ignore o índice do pacote (apenas procurando --find-linksURLs).

-f, --find-links <URL>- Se um URL ou caminho para um arquivo html, analise os links para os arquivos. Se um caminho ou file://URL local que é um diretório, procure por arquivos na lista de diretórios.


7
As informações --no-indexdo comando pip ajudam a instalar o --no-index Ignore package index (visualizando apenas os --find-linksURLs). As informações --find-linksdo comando pip ajudam a instalar -f , --find-links <url>se um URL ou caminho para um arquivo html, analise os links para os arquivos. Se um caminho ou arquivo local: // url for um diretório, procure por arquivos na lista de diretórios.
AWrightIV

1
// Isso poderia ter sido uma solução muito elegante, especialmente tendo em conta a eterna luta com vendorizar: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese

Um cuidado com isso é que você pode pip install <some_module>sem usar, requirements.txtmas isso não será atualizado requirements.txt. Uma alternativa pode estar atualizando uma janela de encaixe, de forma a listar todos os comandos de instalação do pip executados para instalar dependências.
comercial,

Eu tentei isso python -m pip install -r requirements.txtquando dentro do ambiente venv ativado. as coisas foram instaladas sem problemas, mas quando eu faço a lista do pip, não mostra esses pacotes, quando estou no venv ativo ou mesmo depois de desativar o venv. também não é capaz de usar esses pacotes. não sei o que há de errado aqui
Shreyan Mehta 12/02/19

Tem certeza de que se pythonrefere ao executável python do ambiente ativado $ which python?
codeape 12/02/19

1365

Eu li o acima, percebo que esta é uma pergunta antiga, mas está totalmente sem solução e ainda está no topo dos meus resultados de pesquisa no Google, então aqui está uma resposta que funciona para todos:

pip install -r /path/to/requirements.txt

284
Sei que esta resposta não aborda a questão original, mas ele responde à pergunta que eu tinha quando eu encontrei isso no Google ...
Jonathan

8
@ MikeLyons, com certeza, a pergunta não mudou de fato - não há histórico de edições.
Mark Amery

49
para aqueles que gostam de saber o que escreve, o -r no comando significa apenas "instalar a partir de um arquivo de requisitos", e é um atalho para --requirement
Florent Chatterji

2
Quando quero atualizar um pacote (por exemplo, Django), altero a versão no meu arquivo requirements.txt e, em seguida, corro pip install -r /path/to/requirements.txt. Isso detecta a alteração, atualiza o pacote e deixa todo o resto em paz.
Utilizador

1
enquanto isso geralmente funciona, algumas sutilezas fazem com que falhe. Se alguma instalação falhar nos pacotes requirements.txt, nenhum deles será instalado. Se um módulo necessário importar uma dependência durante sua instalação (em vez de apenas listá-la como um requisito), ele falhará, mesmo que a dependência o preceda na lista de dependências, causando a falha de todos os módulos. Provavelmente, é um erro importar um módulo dependente durante a instalação, mas também é inesperado que as dependências listadas requirements.txtnão sejam instaladas sequencialmente, mas de uma só vez.
iggie

130

Para o virtualenv instalar todos os arquivos no arquivo requirements.txt.

  1. cd para o diretório em que o requirements.txt está localizado
  2. ative seu virtualenv
  3. executar: pip install -r requirements.txt no seu shell

3
"pyenv virtualenv pip install requirements.txt não está funcionando" por causa do Google ...
Jerad

Funciona para mim em vez de outras respostas, ty
Jo Eark

58

Eu tive um problema parecido. Eu tentei isso:

pip install -U -r requirements.txt 

(-U = atualize se já estiver instalado)

Mas o problema continuou. Percebi que algumas bibliotecas genéricas para desenvolvimento estavam ausentes.

sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk

Não sei se isso iria ajudá-lo.


32
pip install -r requirements.txt

Para mais detalhes, consulte a opção de ajuda.

pip install --help

Podemos encontrar a opção '-r'

-r, --requirement Instala a partir do arquivo de requisitos fornecido. Esta opção pode ser usada várias vezes.

Informações adicionais sobre algumas opções de instalação do pip comumente usadas: (Esta é a opção de ajuda no comando pip install)

insira a descrição da imagem aqui

Além disso, o acima é o conjunto completo de opções. Por favor, use pip install --help para obter a lista completa de opções.


26

Resposta curta

pip install -r /path/to/requirements.txt

ou de outra forma:

python -m pip install -r /path/to/requirements.txt

Explicação

Aqui, -ré uma forma abreviada --requiremente solicita a pipinstalação a partir do requirementsarquivo fornecido .

pipiniciará a instalação somente após verificar a disponibilidade de todos os itens listados no requirementsarquivo e não iniciará a instalação, mesmo que um requirementesteja indisponível.

Uma solução alternativa para instalar os pacotes disponíveis é instalar os pacotes listados, um por um. Use o seguinte comando para isso. Um aviso de cor vermelha será exibido para notificá-lo sobre os pacotes indisponíveis.

cat requirements.txt | xargs -n 1 pip install

Para ignorar comentários (linhas começando com a #) e linhas em branco, use:

cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install

20

Freqüentemente, você desejará uma instalação rápida a partir de arquivos locais, sem investigar o PyPI.

Primeiro, faça o download dos arquivos que atendem aos seus requisitos:

$ pip install --download <DIR> -r requirements.txt

Em seguida, instale usando –find-linkse –no-index:

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt

no such option: --download
Max Malysh

12

Eu trabalho com muitos sistemas que foram prejudicados pelos desenvolvedores "seguindo as instruções que encontraram na internet". É extremamente comum que você pipe você pythonnão estejam olhando para os mesmos caminhos / pacotes de sites. Por esse motivo, quando encontro estranheza, começo fazendo o seguinte:

$ python -c 'import sys; print(sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']

$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

Esse é um sistema feliz .

Abaixo está um sistema infeliz . (Ou pelo menos é um sistema alegremente ignorante que faz com que outras pessoas sejam infelizes.)

$ pip --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

$ python -c 'import sys; print(sys.path)'
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']

$ which pip pip2 pip3
/usr/local/bin/pip
/usr/local/bin/pip3

É infeliz porque pipestá (python3.6 e) usando /usr/local/lib/python3.6/site-packageswhile pythoné (python2.7 e) usando/usr/local/lib/python2.7/site-packages

Quando eu quero ter certeza de que estou instalando requisitos no python certo , faço o seguinte:

$ which -a python python2 python3
/usr/local/bin/python
/usr/bin/python
/usr/local/bin/python2
/usr/local/bin/python3

$ /usr/bin/python -m pip install -r requirements.txt

Você já ouviu: "Se não estiver quebrado, não tente consertar". A versão do DevOps é: "Se você não o quebrou e pode contornar isso, não tente corrigi-lo".


10

Antes de tudo, crie um ambiente virtual

no python 3.6

virtualenv --python=/usr/bin/python3.6 <path/to/new/virtualenv/>

em python 2.7

virtualenv --python=/usr/bin/python2.7 <path/to/new/virtualenv/>

em seguida, ative o ambiente e instale todos os pacotes disponíveis no arquivo requirements.txt.

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>

9

Instalando o arquivo requirements.txt dentro do ambiente virtual com python 3:

Eu tive o mesmo problema. Eu estava tentando instalar o arquivo requirements.txt dentro de um ambiente virtual. Eu encontrei a solução.

Inicialmente, criei meu ambiente virtual desta maneira:

virtualenv -p python3 myenv

Ative o ambiente usando:

source myenv/bin/activate

Agora eu instalei o requirements.txt usando:

pip3 install -r requirements.txt

A instalação foi bem-sucedida e eu pude importar os módulos.


Eu enfrentei esse problema ao instalar o arquivo de requisitos dentro de um ambiente virtual. Eu já modifiquei a minha resposta para resolver o problema
janu777

1
Usando Anaconda Python 3.6 no Windows, eu tinha que fazer virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
Na verdade, pelo contrário, esta parece ser a única resposta que faz responder à parte da pergunta sobre a instalação deps definidos localmente em requirements.txtum virtualenv. A menos que esteja faltando alguma coisa? De qualquer forma, obrigado!
Davnicwil 19/09

8

tente isso

python -m pip install -r requirements.txt

7
pip install --user -r requirements.txt 

OU

pip3 install --user -r requirements.txt 

é possível especificar o arquivo --userinterno requirements.txt?
liang
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.