É possível instalar pacotes usando o pip do sistema de arquivos local?
Eu executei o python setup.py sdist
meu pacote, que criou o arquivo tar.gz apropriado. Este arquivo está armazenado no meu sistema em /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Agora, em um ambiente virtual, eu gostaria de instalar pacotes provenientes do pypi ou do local local específico /srv/pkg
.
Isso é possível?
PS
Eu sei que posso especificar pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Isso funcionará, mas estou falando sobre o uso do /srv/pkg
local como outro local para o pip pesquisar se eu digitar pip install mypackage
.
pip install <Path-to-WHL-file>
.Respostas:
Tenho certeza de que o que você está procurando é chamado de
--find-links
opção.Embora você possa precisar gerar um dummy
index.html
para o índice do pacote local, que lista os links para todos os pacotes. Essa ferramenta ajuda a:https://github.com/wolever/pip2pi
fonte
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
Deveria trabalhar.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
ainda permitirá pesquisar no PyPI se o pacote não for encontrado no local especificado ou se uma versão mais recente estiver disponível. No Windows, acho que combinar isso com--only-binary=packagename
(ou--only-binary=:all:
) é extraordinariamente útil. Isso evita que o pip tente baixar quaisquer pacotes com dependências nativas que só têm distribuições de origem no PyPI (e, portanto, requerem compilação), que é o motivo mais comum para tentar instalar a partir de um diretório. Ao contrário--no-index
, ainda posso instalar outros pacotes do PyPI.A respeito::
por exemplo,
pip install -e /srv/pkg
onde / srv / pkg é o diretório de nível superior onde 'setup.py' pode ser encontrado.
fonte
--editable
é que parece procurar no diretório do pacote local e definir a fonte como um repositório git, se houver um - um pouco mais flexível do que apenas uma pasta. Não consigo encontrar documentação para isso.do pip install -e
o check-out do código no git remote, gostaria de instalar o código como está (com alterações ainda não no controle remoto).Estou instalando
pyfuzzy
mas não está no PyPI; ele retorna a mensagem:No matching distribution found for pyfuzzy
.Eu tentei a resposta aceita
Mas também não funciona e retorna o seguinte erro:
Por fim, encontrei um bom caminho simples para isso: https://pip.pypa.io/en/latest/reference/pip_install.html
Portanto, o seguinte comando funcionou para mim:
Espero que isso possa ajudar-lhe.
fonte
Could not find a version that satisfies
erro. Obrigado.Esta é a solução que acabei usando:
Eu juntei isso a partir dos exemplos de instalação do pip e da resposta de Rikard em outra pergunta . O argumento "--pre" permite instalar versões que não são de produção. O argumento "--no-index" evita pesquisar nos índices PyPI. O "--find-links =." pesquisas de argumento na pasta local (isso pode ser relativo ou absoluto). Eu usei os argumentos "--log-file", "log.txt" e "-vv" para depuração. O argumento "--upgrade" permite instalar versões mais recentes sobre as mais antigas.
Eu também encontrei uma boa maneira de desinstalá-los. Isso é útil quando você possui vários ambientes Python diferentes. É o mesmo formato básico, basta usar "uninstall" em vez de "install", com uma medida de segurança para evitar desinstalações não intencionais:
A pasta local contém estes arquivos: install.py, uninstall.py, mypackagename-1.0.zip
fonte
Uma opção --find-links faz o trabalho e funciona a partir do
requirements.txt
arquivo!Você pode colocar arquivos de pacotes em alguma pasta e pegar o mais recente sem alterar o arquivo de requisitos, por exemplo
requirements
:Agora
requirements/base.txt
colocado:Uma maneira elegante de atualizar pacotes proprietários, basta soltar um novo na pasta
Dessa maneira, você pode instalar pacotes de
local folder
ANDpypi
com a mesma chamada única:pip install -r requirements/production.txt
PS. Consulte o meu garfo cookiecutter-djangopackage para ver como dividir os requisitos e usar a organização de requisitos baseada em pastas.
fonte
Na página de instalação de pacotes, você pode simplesmente executar:
onde / srv / pkg / mypackage é o diretório que contém setup.py .
Além disso 1 , você pode instalá-lo a partir do arquivo morto:
1 Embora indicado na pergunta, devido à sua popularidade, ele também está incluído.
fonte
Supondo que você possua virtualenv e um
requirements.txt
arquivo, é possível definir dentro deste arquivo onde obter os pacotes:fonte
Tendo requisitos
requirements.txt
eegg_dir
como um diretóriovocê pode criar seu cache local:
$ pip download -r requirements.txt -d eggs_dir
então, usar esse "cache" é simples como:
$ pip install -r requirements.txt --find-links=eggs_dir
fonte
Para instalar apenas a partir do local, você precisa de 2 opções:
--find-links
: onde procurar dependências. Não há necessidade defile://
prefixo mencionado por outros.--no-index
: não procure nos índices pypi por dependências ausentes (dependências não instaladas e não no--find-links
caminho).Assim, você pode executar de qualquer pasta o seguinte:
Se o seu mypackage estiver configurado corretamente, ele listará todas as suas dependências e, se você usou o pip download para baixar a cascata de dependências (ou seja, dependências de dependências, etc.), tudo funcionará.
Se você quiser usar o índice pypi, se estiver acessível, mas o fallback para as rodas locais, se não, poderá remover
--no-index
e adicionar--retries 0
. Você verá o pip pausar um pouco enquanto estiver tentando verificar o pypi em busca de uma dependência ausente (uma não instalada) e, quando encontrar que não pode alcançá-lo, voltará ao local. Não parece haver uma maneira de dizer ao pip para "procurar os locais primeiro e depois o índice".fonte
Eu tenho tentado conseguir algo realmente simples e falhei miseravelmente, provavelmente sou estúpido.
De qualquer forma, se você possui um script /
Dockerfile
que baixa um arquivo zip de pacote python (por exemplo, do GitHub) e deseja instalá-lo, pode usar ofile:///
prefixo para instalá-lo, conforme mostrado no exemplo a seguir :NOTA : Eu sei que você pode instalar o pacote imediatamente usando,
pip install https://example.com/mypackage.zip
mas no meu caso, eu queria verificar a soma de verificação (nunca paranóica o suficiente) e falhei miseravelmente ao tentar usar as várias opções fornecidas pelo pip / the#md5
fragmento.Foi surpreendentemente frustrante fazer algo tão simples diretamente
pip
. Eu só queria passar uma soma de verificação epip
verificar se o zip estava correspondendo antes instalá-lo.Eu provavelmente estava fazendo algo muito estúpido, mas no final desisti e optei por isso. Espero que ajude outras pessoas a tentar fazer algo semelhante.
fonte