Изменения в --editable библиотеках Python требуют перезагрузки ipython, чтобы их можно было увидеть.Python

Программы на Python
Ответить
Anonymous
 Изменения в --editable библиотеках Python требуют перезагрузки ipython, чтобы их можно было увидеть.

Сообщение Anonymous »

Я разрабатываю библиотеки Python (подобные этой) в среде (мини)conda, используя:
  • текстовый редактор (если уж на то пошло, VS Code, но исключительно как текстовый редактор); и
  • отдельный терминал zsh (в настоящее время на macOS Tahoe с процессором Intel).
Библиотеки (с использованием setup.py) устанавливаются как доступные для редактирования с помощью pip install -e ., и они повторно вызываются из оболочки ipython, когда я разрабатываю код с помощью запуска not_in_the_library.py, где not_in_the_library.py — это локальный скрипт, который я использую для вызова модулей библиотеки по мере необходимости, например. в случае библиотеки, указанной выше:

Код: Выделить всё

import dummy

print(dummy.dummy_fct())
Я делал это в течение многих лет без необходимости перезапускать оболочку ipython, чтобы немедленно «увидеть» изменения, которые я вношу в свои редактируемые библиотеки. То есть:

Код: Выделить всё

run not_in_the_library.py  # -> works fine
# ... manual edit & save of the library files ...
run not_in_the_library.py. # -> shows the new behavior
Однако вышеуказанное поведение нарушено. Конкретно у меня теперь есть:

Код: Выделить всё

run not_in_the_library.py  # -> works fine
# ... manual edit & save of the library files ...
run not_in_the_library.py. # -> shows **the old behavior !**
Я перепробовал все, что мог придумать, чтобы понять, что происходит, но безрезультатно:
  • мои библиотеки действительно установлены как редактируемые. Используя Inspect.getsource(), я могу сразу увидеть свои изменения.
  • Выполнение %reset не помогает. Он все очищает и принудительно импортирует библиотеку, но изменения в коде не отражаются.
  • Выполнение importlib.reload() не дает никакого эффекта (т. е. библиотека перезагружается, но не включает последние изменения).
  • Переустановка conda не помогла. Я наблюдаю одно и то же поведение на двух разных ноутбуках MacOS под управлением Tahoe и Monterey.
  • Я наблюдаю такое поведение при запуске Python 3.14 с последними версиями инструментов настройки, а также в более старой среде с Python 3.11, pip 23.1.2, setuptools 68.0.0
Я прекрасно понимаю, что все еще использую «старую школу» setup.py (и setuptools) и никаких pyproject.toml, Poetry, uv или других современных инструментов. Является ли проблема, которую я вижу результатом этого?
Что именно может привести к тому, что я увижу «призрачные» пакеты в редактируемом режиме?
Для всех, кто ищет MWE, я разместил здесь фиктивную, пустую библиотеку: https://github.com/fpavogt/dummy
Это можно использовать для воспроизведения описанных выше шагов.
Изменить: следуя ответам на этот аналогичный SO вопрос, использование следующей магии работает:

Код: Выделить всё

%load_ext autoreload
%autoreload 2

run not_in_the_library.py  # -> works fine
# ... manual edit & save of the library files ...
run not_in_the_library.py # -> shows the new behavior
И теперь я не понимаю, почему это работает, а importlib.reload() — нет.

Подробнее здесь: https://stackoverflow.com/questions/798 ... to-be-seen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»