“Pip install --editable ./” vs “python setup.py develop”

177

Existe alguma diferença significativa entre

pip install -e /path/to/mypackage

e a variante setuptools?

python /path/to/mypackage/setup.py develop
PeterE
fonte
1
Este parece ser um link atualizado que descreve o modo de desenvolvimento: setuptools.readthedocs.io/en/latest/…
#
se você estiver interessado em desinstalar (pacotes no modo de desenvolvimento / editável), tente esta pergunta: stackoverflow.com/questions/17346619/…
Charlie Parker

Respostas:

130

Tente evitar ligar setup.pydiretamente, pois isso não informa adequadamente ao pip que você instalou seu pacote.

Com pip install -e:

Para projetos locais, o diretório "SomeProject.egg-info" é criado em relação ao caminho do projeto. Essa é uma vantagem do uso setup.py develop, que cria as informações sobre o ovo diretamente em relação ao diretório de trabalho atual.

Mais: docs

Leia também os documentos das ferramentas de instalação .

sobolevn
fonte
O usuário precisa executar o 'python setup.py sdist' novamente depois de fazer a alteração do arquivo para que a alteração tenha efeito?
variável
no entanto, se você precisar depurar (o próprio arquivo setup.py) com 'set_trace', o 'python setup.py develop' tornará possível
mirek
O segundo URL está quebrado.
bad_coder 20/06
Ambos trabalham para mim.
sobolevn 22/06
76

Mais uma diferença: pip install -eusa roda enquanto python setup.py develop
não a usa.

Com install, você pode obter o mesmo comportamento usando
pip install -e /path/to/package --no-use-wheel

Mais informações sobre rodas: rodas python

user2488286
fonte
18
Observe que, de acordo com pip.pypa.io/en/stable/reference/pip_install , --no-use-wheelDEPRECATED em favor de--no-binary :all:
Nzbuu 14/03
Podemos fazer o pip install -e para o pacote produzido usando sdist?
variável
36

Outra diferença que pode favorecer pip install -eé que, se seu projeto tem dependências em install_requiresem setup.py, em seguida, pip install -e .instala as dependências com pip, enquanto python setup.py developpode instalar com easy_install, e pode causar problemas re: 'ovo-info' como mencionado acima. Quando install-requiresusado dependency_linkscom URLs git personalizados, com identificadores de ovo anexados, isso pode ser especialmente irritante.

ely
fonte
1
isso explica totalmente por que meu pacote particular falhou ao ser instalado. está no meu servidor devpi não pypi. obrigado.
Ckot 23/03/19
Quando você diz que o pacote se torna editável, você quer dizer que o usuário terá que executar o 'python setup.py sdist' novamente depois de fazer alterações no arquivo do pacote? Ou executar o comando acima não é necessário?
variável
@ variável quando você instala um pacote local pip install -e ., ele basicamente cria um link simbólico no diretório de pacotes de sites Python relevante para apontar para sua cópia de trabalho. Como as alterações de código são feitas nessa cópia de trabalho, ela é refletida instantaneamente na versão "instalada", portanto, você não precisa executar novamente os comandos de instalação à medida que avança. Isto é principalmente útil para o desenvolvimento em um repositório que representa um pacote instalável, mas também pode ser útil para, por exemplo, escrever algum conjunto de módulos com apenas importações absolutos, etc.
Ely
0

Outra diferença: quando você executa python setup.py developuma versão que é considerada um pré-lançamento (talvez porque você esteja executando a partir de um clone do git quando não fez check-out de um release), habilitará a instalação de pré-lançamentos de suas dependências . Por outro lado, pip install --editablevocê teria que passar --preexplicitamente se quiser esses pré-lançamentos.

(Consulte o log do IC com pré-lançamentos usados ​​acidentalmente e compare-o com uma compilação fixa aqui .)

Jan Kundrát
fonte