[Bug] requests is not installed. После компиляции кода
Seraphim19119 opened this issue · 4 comments
Код работает, но после компиляции начинает выдавать ошибку:
Traceback (most recent call last):
File "yadisk\client.py", line 227, in init
File "yadisk\import_session.py", line 47, in import_session
ModuleNotFoundError: No module named 'yadisk.sessions'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 3, in
File "yadisk\client.py", line 229, in init
RuntimeError: requests is not installed. Either install requests or provide a custom session
код:
import yadisk
client = yadisk.Client(token="*****")
# или
# client = yadisk.Client("<id-приложения>", "<secret-приложения>", "<токен>")
# Вы можете использовать либо конструкцию with, либо вручную вызвать client.close() в конце
with client:
# Проверяет, валиден ли токен
print(client.check_token())
# Скачивает "/some-file-to-download.txt" в "downloaded.txt"
client.download("**", "**")
- ОС: Windows
- Версия библиотеки
yadisk
: 2.1.0 - Версия Python: 3.12.1
- Компилировал через auto-py-to-exe: "pyinstaller --noconfirm --onefile --windowed "main.py""
Знакомая проблема, кто-то уже сообщал мне о подобном (но не гитхабе).
yadisk динамически подгружает модуль yadisk.sessions.requests_session
(по умолчанию используется requests), PyInstaller этого не видит и не включает в сборку.
Тут есть 2 варианта решения:
- добавить опцию
--hidden-import=yadisk.sessions.requests_session
при сборке exe'шника - явно импортировать класс
RequestsSession
и передать в конструктореyadisk.Client
session=RequestsSession()
Сообщение об ошибке всё равно, конечно, вводит в заблуждение, поменяю его в следующей версии.
Спасибо огромное, это и вправду помогло<3
Доброго времени суток.
А можно по подробнее на счет того что именно надо делать в втором варианте, а то совсем не понятно :_
А можно по подробнее на счет того что именно надо делать в втором варианте, а то совсем не понятно :_
Можно сделать так:
import yadisk
from yadisk.sessions.requests_session import RequestsSession
with yadisk.Client(token=..., session=RequestsSession()) as client:
print(client.check_token())
...
В таком случае PyInstaller должен сам обнаружить все импорты без дополнительных опций.