Видалення модуля python, встановленого в режимі розробки


92

Привіт, я намагався упакувати python за допомогою setuptools і для тестування встановив модуль у режимі розробки. тобто

python setup.py develop

Це додало каталог моїх модулів до sys.path. Тепер я хочу видалити модуль, чи є спосіб зробити це?

Спасибі заздалегідь


4
Почніть використовувати pipінший менеджер із можливістю видалення для управління пакетами python.
Томаш Висоцький,

1
@Tomasz Як ти робиш еквівалент python setup.py developз pip?
akaihola

7
pip install -e.
Томаш Висоцький,

11
"pip" - не правильна відповідь на це питання. Встановлення проекту, який ви розробляєте, за допомогою "pip" для запуску або використання означає, що вам доведеться перевстановлювати кожен раз, коли ви змінюєте вихідний код. Правильним способом є використання 'setup.py Develop', як зазначено у вихідному питанні.
Джонатан Хартлі,

6
@JonathanHartley Це просто неправда; pip має аргумент --editable(або -e), який поводиться приблизно еквівалентно setuptools 'develop . Я думав, що, можливо, це --editableбуло новіше, ніж ваш коментар, але ні - швидкий пошук репозиторію pip на GitHub виявляє посилання на редаговані в комітах ще в 2009 році. Більше того, я бачу, що на це вже вказував Томаш Висоцький до того, як ви прокоментували !
Mark Amery

Відповіді:


224

Використовуйте --uninstallабо -uопцію develop, тобто:

python setup.py develop --uninstall

Це видалить його з easy-install.pth і видалить .egg-посилання. Єдине, що він не робить, це видалення сценаріїв (поки).


3
Зверніть увагу, що якщо у вашій розробницькій версії встановлено деякі виконувані файли, і ви змінили їх у своєму setup.py, вам слід видалити їх вручну.
norok2

1
Я запускаю його так само, як пояснювалось, помилок у вихідних даних немає, але я все ще можу імпортувати свій пакет розробки глобально, здається, його не видалено. EDIT: Я знаю чому, мені довелося запустити його з --userопцією, як це було під час інсталяції:python setup.py develop --uninstall --user
Marek

Я не думаю, що це безпечно, оскільки при розробці (наприклад) перейменуванні модуля все може змінитися. Вам потрібно вручну видалити все.
mathtick

@ norok2, які ручні команди потрібно виконати, щоб видалити ці виконувані файли. Наскільки я знаю, вищесказане працює для певної версії python / pip, хоча я не впевнений, які саме.
Чарлі Паркер,

1
@CharlieParker rmабо delзалежно від вашої ОС. Я мав на увазі, що якщо на момент встановлення у вас були деякі виконувані файли, а потім ви змінили їх імена (або видалили) у своєму setup.py, то setup.pyбільше не будете про них знати (незалежно від вашої pip/ pythonверсії, і вам потрібно про них подбати. Зазвичай вони знаходяться в якомусь binкаталозі на системах POSIX (читайте Linux, BSD, MacOS X), не пам’ятаєте про Win
norok2,

16

Відредагуйте easy-install.pth у каталозі ваших пакетів сайтів і видаліть рядок, який вказує на вашу версію для розробки цього пакета.


Так, я зробив саме це, і ще один файл був там за назвою package-egg-link або щось таке, що я видалив, і тепер посилання на модуль видалено Спасибі :)
copyninja

10
"setup.py develop --uninstall" робить це за вас, див. відповідь @ pjeby
Джонатан Хартлі

3
Це спрацювало для мене, коли develop --uninstallне вдалося, оскільки я розділив проект на дві частини, а неправильний залишився у вихідному каталозі.
Wesley Baugh

1

Я мав подібну проблему з цим раніше. Що я зробив, це завантажив оболонку Python, імпортував модуль, а потім роздрукував його__file__ атрибут. Звідти я просто видалив папку або файл, який був пов’язаний.

Що вам може знадобитися, це використання virtualenv, що ця система дозволяє вам створити екземпляр python окремо від вашої системи. Будь-які модулі, які ви встановлюєте або використовуєте в цьому випадку, є автономними, включаючи версію модуля.

Зараз я зберігаю всі свої проекти всередині власного вміщеного virtualenv, що дозволяє мені встановлювати та використовувати будь-які модулі, які я хочу, не турбуючись про викручування модулів з інших проектів.


Що ж, наступного разу, коли я буду грати з пакетами, я буду використовувати це, щоб не псувати мою систему Python. Дякую за інформацію
copyninja
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.