É possível instalar pacotes usando pip a partir do sistema de arquivos local?
Eu executei python setup.py sdist' para o meu pacote, que criou o arquivo tar.gz apropriado. Este arquivo é armazenado no meu sistema em
/srv/pkg/mypackage/mypackage-0.1.0.tar.gz`.
Agora em um ambiente virtual eu gostaria de instalar pacotes vindos do pypi ou do local específico /srv/pkg
.
Isto é possível?
**PS***
Eu sei que posso especificar pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Isso vai funcionar, mas eu estou falando em utilizar a localização /srv/pkg
como outro lugar para o pip procurar se eu digitei `pip install mypackage'.
E sobre..:
pip install --help
...
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools
"develop mode") from a local project path or a VCS url.
por exemplo, pip install -e /srv/pkg
onde /srv/pkg é o diretório de nível superior onde 'setup.py' pode ser encontrado.
Tenho certeza que o que você está procurando é chamado de opção de "encontrar-ligações".
Embora você possa precisar gerar um index.html
falso para o seu índice de pacotes local, que lista os links para todos os pacotes. Esta ferramenta ajuda:
Esta é a solução que acabei por usar:
import pip
def install(package):
# Debugging
# pip.main(["install", "--pre", "--upgrade", "--no-index",
# "--find-links=.", package, "--log-file", "log.txt", "-vv"])
pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])
if __name__ == "__main__":
install("mypackagename")
raw_input("Press Enter to Exit...\n")
Eu juntei isso a partir de exemplos de instalação de pip assim como a partir de resposta de Rikard's em outra pergunta. O argumento "--pre" permite instalar versões não-produtivas. O "--não-index" argumento evita a pesquisa nos índices PyPI. O "--find-links=." o argumento procura na pasta local (isto pode ser relativo ou absoluto). Eu usei o "--log-file", "log.txt" e "-vv" argumentos para depuração. O "--upgrade" argumento permite que você instale versões mais novas sobre versões mais antigas.
Eu também encontrei uma boa maneira de desinstalá-los. Isto é útil quando você tem vários ambientes Python diferentes. It's o mesmo formato básico, apenas usando "uninstall" ao invés de "install", com uma medida de segurança para evitar desinstalações não intencionais:
import pip
def uninstall(package):
response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
if "y" in response.lower():
# Debugging
# pip.main(["uninstall", package, "-vv"])
pip.main(["uninstall", package])
pass
if __name__ == "__main__":
uninstall("mypackagename")
raw_input("Press Enter to Exit...\n")
A pasta local contém estes arquivos: install.py, uninstall.py, mypackagename-1.0.zip