Мне удалось использовать этот модуль без установки - просто импортируйте его из пути для использования,
import sys
url = 'https://example.com'
sys.path.insert(0, r'C:\Users\i\Downloads\you-get-0.4.1128\src') #
from you_get import common
common.any_download(url, info_only=True)#NoneType
Кажется возможным в Python использовать zipimport для непосредственного использования zip-архива модуля не извлекая, интересно, какой правильный способ использовать zipimport, простая попытка, подобная приведенной ниже, дает только исключение. Я загрузил файл из этого модуля , файл C:\Users\i\Downloads\you-get-0.4.1128.zip существует и не поврежден.
>>> import zipimport
>>> zipimport.zipimporter(r'C:\Users\i\Downloads\you-get-0.4.1128.zip')
Traceback (most recent call last):
File "", line 1, in
zipimport.zipimporter(r'C:\Users\i\Downloads\you-get-0.4.1128.zip')
zipimport.ZipImportError: not a Zip file: 'C:\\Users\\i\\Downloads\\you-get-0.4.1128.zip'
>>>
(Это предложенный способ действия, который отвечает на ваш вопрос: «Правильный способ использования zipimport», см. ниже ниже для непосредственной причины вашей ошибки.)
Вы не должны используйте zipimport напрямую. Вместо этого вы должны добавить файл .zip в sys.path - он будет использоваться, как если бы он был каталогом.
При этом файл, который вы загрузили, является исходным дистрибутивом - он имеет setup.py в корневом каталоге и фактические модули в подкаталоге. Чтобы использовать модуль, вам обычно нужен встроенный дистрибутив.
Рассказывать все об источниках и встроенных дистрибутивах выходит за рамки одного ответа. Один из возможных способов:
распаковать .zip сделать колесо с помощью setup.py с python setup.py bdist_wheel и установить его с помощью pip install <path to .whl>Отладка с помощью Visual Studio показывает, что zipimport проверяет файл с на встроенный дистрибутив , который включает в себя расширения ZIP64, к которым этот файл не соответствует.
это код, который он зажимает:
Modules\zipimport.c:
if (fseek(fp, -22, SEEK_END) == -1) {
<...>
}
header_position = (unsigned long)ftell(fp);
<...>
if (fread(buffer, 1, 22, fp) != 22) {
<...>
}
if (get_uint32(buffer) != 0x06054B50u) {
/* Bad: End of Central Dir signature */
errmsg = "not a Zip file";
goto invalid_header;
}
Как вы можете видеть, он считывает и проверяет последние 22 байта файла как Расширения ZIP64 - этого файла нет.
Я загрузил файл и получил то же исключение, хотя файл кажется законным.
Возможно, вы должны использовать zipfile вместо:
>>> import zipfile
>>> zipfile.ZipFile( 'you-get-0.4.1128.zip' )
<zipfile.ZipFile object at 0x7fc515343c50>
>>>