Перезагрузка модулей Cython на лету - PullRequest
2 голосов
/ 25 января 2020

Я пытаюсь автоматически обновить модули Cython .so, которые использует моя программа python на лету. После того, как я скачал новый модуль и del module и import module Python, кажется, все еще импортируют старую версию.

Из этот вопрос , я пытался, но это не не работает:

from importlib import reload
import pyximport
pyximport.install(reload_support=True)
import module as m
reload(m)

С этот вопрос , я тоже пытался, и он тоже не работал:

del sys.modules['module']
del module
import module

У меня также попробовал это безуспешно:

from importlib import reload
import my_module

my_module = reload(my_module)

Есть идеи, как я могу импортировать файлы Cython .SO, импортированные на лету?


РЕДАКТИРОВАТЬ: Добавление кода для проверьте обновление и загрузите
update_filename = "my_module.cpython-37m-darwin.so"

if __name__ == '__main__':
    response = check_for_update()
    if response != "No new version available!":
        print (download_update(response))

def check_for_update():
    print("MD5 hash: {}".format(md5(__file__)))
    s = setup_session()
    data = {
        "hash": md5(__file__),
        "type": "md5",
        "platform": platform.system()
    }
    response = s.post(UPDATE_CHECK_URL, json=data)
    return response.text

def download_update(url):
    s = setup_session()
    with s.get(url, stream=True) as r:
        r.raise_for_status()
        with open(update_filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=8192): 
                if chunk:
                    f.write(chunk)
    return update_filename

После загрузки нового SO-файла я вручную набрал команды, перечисленные выше.

...