обновление/перезагрузка Python

Простой: Если код не находится в безопасном источнике, он не существует

, Подверсия свободна и лучше, чем VSS, но VSS затем ничто не определенно лучше.

27
задан womble 4 October 2009 в 18:23
поделиться

3 ответа

Непонятно, что вы имеете в виду под «обновлением», но нормальное поведение Python заключается в том, что вам нужно перезапустить программное обеспечение, чтобы оно по-новому взглянуло на модуль Python и перечитало его.

Если о ваших изменениях не позаботятся даже после перезапуска, то это происходит из-за одной из двух ошибок:

  1. Временная метка в pyc-файле неверна и находится где-то в будущем.
  2. Вы действительно являетесь редактирование неправильного файла.

Вы можете перезагрузить повторно прочитать файл даже без перезапуска программного обеспечения с помощью команды reload (). Обратите внимание, что любую переменную, указывающую на что-либо в модуле, необходимо будет повторно импортировать после перезагрузки. Примерно так:

import themodule
from themodule import AClass

reload(themodule)
from themodule import AClass
32
ответ дан 28 November 2019 в 04:52
поделиться

Я не совсем уверен, что вы имеете в виду, поэтому не стесняйтесь поправлять меня. Вы импортируете модуль - назовем его mymodule.py - в свою программу, но когда вы меняете его содержимое, вы не видите разницы?

Python не будет искать изменения в mymodule.py каждый раз, когда он используется , он загрузит его в первый раз, скомпилирует его в байт-код и сохранит внутри. Обычно он также сохраняет скомпилированный байт-код (mymodule.pyc). В следующий раз, когда вы запустите свою программу, она проверит, является ли mymodule.py более свежим, чем mymodule.pyc, и при необходимости перекомпилирует его.

Если вам нужно, вы можете явно перезагрузить модуль:

import mymodule

[... some code ...]

if userAskedForRefresh:
    reload(mymodule)

Конечно , это сложнее, и у вас могут быть побочные эффекты в зависимости от того, что вы делаете со своей программой в отношении другого модуля,

1
ответ дан 28 November 2019 в 04:52
поделиться

Один из способов сделать это - вызвать reload .

Пример: Вот содержимое foo.py :

def bar():
    return 1

В в интерактивном сеансе я могу:

>>> import foo
>>> foo.bar()
1

Затем в другом окне я могу изменить foo.py на:

def bar():
    return "Hello"

Вернувшись в интерактивный сеанс, вызвав foo.bar () по-прежнему возвращает 1, пока я не сделаю это:

>>> reload(foo)
<module 'foo' from 'foo.py'>
>>> foo.bar()
'Hello'

Вызов reload - это один способ убедиться, что ваш модуль обновлен, даже если файл на диске изменился. Он не обязательно самый эффективный (вам может быть лучше проверить время последней модификации файла или использовать что-то вроде pyinotify перед перезагрузкой ), но его, безусловно, быстро реализовать.

Одна из причин, по которой Python не Каждый раз из исходного модуля читается, что загрузка модуля (относительно) дорогостоящая - что, если бы у вас был модуль 300 КБ, и вы использовали только одну константу из файла? Python загружает модуль один раз и сохраняет его в памяти, пока вы не перезагрузите его.

19
ответ дан 28 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: