Removendo o módulo python instalado no modo de desenvolvimento

90

Olá, eu estava testando o empacotamento python usando setuptools e para testar instalei o módulo em modo de desenvolvimento. ie

python setup.py develop

Isso adicionou meu diretório de módulos ao sys.path. Agora eu quero remover o módulo, há alguma maneira de fazer isso?

desde já, obrigado

copyninja
fonte
4
Comece a usar pipou outro gerenciador com capacidade de desinstalação para gerenciar pacotes Python.
Tomasz Wysocki
1
@Tomasz Como você faz o equivalente a python setup.py developcom pip?
akaihola
7
pip install -e.
Tomasz Wysocki
11
'pip' não é a resposta certa para essa pergunta. Instalar um projeto que você está desenvolvendo usando 'pip' para executá-lo ou usá-lo significa que você terá que reinstalar toda vez que modificar o código-fonte. A maneira correta é usar 'setup.py desenvolver' como a pergunta original afirma.
Jonathan Hartley
6
@JonathanHartley Isso é simplesmente falso; pip tem um argumento --editable(ou -e) que se comporta aproximadamente de forma equivalente ao setuptools 'develop . Achei que talvez --editablefosse mais recente do que o seu comentário, mas não - uma rápida pesquisa do repositório pip no GitHub mostra referências a editáveis ​​em commits em 2009. Além do mais, vejo que isso já foi apontado por Tomasz Wysocki antes de você comentar !
Mark Amery

Respostas:

223

Use a opção --uninstallou -upara develop, ou seja:

python setup.py develop --uninstall

Isso o removerá de easy-install.pth e excluirá o link .egg. A única coisa que ele não faz é deletar scripts (ainda).

PJ Eby
fonte
3
Observe que se a sua versão de desenvolvimento instalou alguns executáveis ​​e você os alterou no seu setup.py, deverá removê-los manualmente.
norok2
1
Eu o executo conforme explicado, sem erros na saída, mas ainda posso importar meu pacote de desenvolvimento globalmente, parece que não foi removido. EDITAR: Eu sei porque, tive que executá-lo com --useropção como fiz durante a instalação:python setup.py develop --uninstall --user
Marek
Não acho que seja seguro, pois as coisas podem mudar no desenvolvimento (por exemplo) na renomeação do módulo. Você precisa remover tudo manualmente.
mathtick
@ norok2 quais são os comandos manuais que devem ser executados para remover esses executáveis. Pelo que eu sei, o acima funciona para certas versões de python / pip, embora não tenha certeza de quais.
Charlie Parker
1
@CharlieParker rmou deldependendo do seu sistema operacional. O que eu quis dizer é que se você teve alguns executáveis no momento em que for instalado e, em seguida, mudar seus nomes (ou remover) na sua setup.py, então setup.pynão vai conhecê-los por mais tempo (não importa o seu pip/ pythonversão e você precisa cuidar deles manualmente. Eles geralmente estão localizados em algum bindiretório em sistemas POSIX (leia Linuxes, BSDs, MacOS X), não lembro sobre o Win.
norok2
16

Edite easy-install.pth no diretório de pacotes do seu site e remova a linha que aponta para a sua versão de desenvolvimento desse pacote.

Zooko
fonte
Sim, eu fiz exatamente isso e mais um arquivo estava lá com o nome package-egg-link ou algo que eu removi e agora a referência ao módulo foi removida Obrigado :)
copyninja 01 de
10
"setup.py Develop --uninstall" faz isso por você, veja a resposta de @pjeby
Jonathan Hartley
3
Isso funcionou para mim quando develop --uninstallfalhei porque eu tinha dividido um projeto em dois, e o errado permaneceu no diretório original.
Wesley Baugh
1

Eu tive um problema semelhante a este antes. O que fiz foi carregar o shell Python, importar o módulo e imprimir seu __file__atributo. De lá, eu apenas removeria a pasta ou arquivo que estava sendo associado.

Você pode querer olhar para o uso do virtualenv, este sistema permite que você crie uma instância de python separada do seu sistema. Todos os módulos que você instalar ou usar nesta instância são independentes, incluindo a versão do módulo.

Eu mantenho todos os meus projetos agora dentro do próprio virtualenv contido, o que me permite instalar e usar quaisquer módulos que eu quiser sem me preocupar em bagunçar módulos de outros projetos.

Tanerax
fonte
Bem, da próxima vez que brincar com pacotes irei usar isso, então não vou bagunçar meu sistema Python. Obrigado pela informação
copyninja 01 de