从导入的 python 包中调用函数的正确方法?

Correct way to call function from imported python package?

尝试从youtube-dl包中导入Youtube签名解密功能但无法使用,如下代码所示:

import youtube_dl.extractor.youtube

video_id = 'HRfNqYoO9EU'
player_url="https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js" 
unsig= 'ALgxI2wwRgIhAN3cG9UXPZSyZcwx2fTOFvbKT_5CAb475HUHuTjSjOw-AiEAjaY1JtcKuHMQkHyCt5cKGBqazj7mpR4EQ1nwGYvhkEc=' 

signature = youtube_dl.extractor.youtube._decrypt_signature(unsig, video_id, player_url)
print signature

尝试了多种导入和引用模块的方法,但 none 有效:(

这是相关文件 - https://github.com/ytdl-org/youtube-dl/blob/695720ebe81166b3ee249eb3916e3c7819ef57a8/youtube_dl/extractor/youtube.py#L2005-L2006

以上代码错误:AttributeError: 'module' object has no attribute '_decrypt_signature'

你指的是classYoutubeIE

的一个方法

您必须导入它,创建一个实例然后调用它,但作为@rdas statet,以 _ 开头的方法通常是内部方法,可能会在包的更高版本中发生变化,也可能不安全打电话。 但是如果没有别的办法,可以从这段代码入手:

from youtube_dl.extractor.youtube import YoutubeIE

import youtube_dl.extractor.youtube as yt
help(yt)

yt=YoutubeIE()

video_id = 'HRfNqYoO9EU'
player_url="https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js" 
unsig= 'ALgxI2wwRgIhAN3cG9UXPZSyZcwx2fTOFvbKT_5CAb475HUHuTjSjOw-AiEAjaY1JtcKuHMQkHyCt5cKGBqazj7mpR4EQ1nwGYvhkEc=' 

signature = yt._decrypt_signature(unsig, video_id, player_url)
print(signature)

您可以这样调用该方法,但是代码失败,因为“_downloader”实例变量设置不正确。所以通常它会调用方法,但你必须弄清楚如何正确初始化对象。 init() 方法的注释表明,您可以直接在 yt=YoutubeIE().

行中传递下载器对象