We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
通过pip安装第三方python库包的时候,有的库、包会提供编译好的二进制文件whl,可以直接使用。 但是pip安装第三方库、包的时候,处理依赖关系的时候,有的依赖包需要从源码编译,而不选择whl文件,不知道为何。
pipdeptree可以显示所有已安装的包的依赖关系,而pipgrip则可以不仅解析已安装的包的依赖关系,还可以通过whl文件解析出依赖关系。
所以有以下想法:
pip download --no-deps --prefer-binary -d . package
由于pipgrip每次都是通过网络下载包源文件后编译成wheel,再解析出依赖关系所以比较慢,所以考虑借鉴pipgrip,自己写python脚本来实现上面的步骤。
通过分析pipgrip的源码可以得出,其解析依赖关系的代码主要在pipper.py文件中。 _extract_metadata函数的作用是提取whl文件的metadata,其中就包含依赖关系; _get_wheel_requirements函数是通过分析metadata,得出依赖关系。
from importlib.metadata import requires print(requires('setuptools'))
可以获取到setuptools的依赖关系,但是还有很多包含extra信息的包(这些包都不是必须的),且只能解析已安装包的
from pip._vendor import pkg_resources _package_name = 'setuptools' p = pkg_resources.working_set.by_key[_package_name].requires() print(p)
可以获取到setuptools的依赖关系,但是也只能解析已安装包的
The text was updated successfully, but these errors were encountered:
No branches or pull requests
通过pip安装第三方python库包的时候,有的库、包会提供编译好的二进制文件whl,可以直接使用。
但是pip安装第三方库、包的时候,处理依赖关系的时候,有的依赖包需要从源码编译,而不选择whl文件,不知道为何。
pipdeptree可以显示所有已安装的包的依赖关系,而pipgrip则可以不仅解析已安装的包的依赖关系,还可以通过whl文件解析出依赖关系。
提出初步解决思路
所以有以下想法:
pip download --no-deps --prefer-binary -d . package
只下载whl文件由于pipgrip每次都是通过网络下载包源文件后编译成wheel,再解析出依赖关系所以比较慢,所以考虑借鉴pipgrip,自己写python脚本来实现上面的步骤。
pipgrip的源码分析
通过分析pipgrip的源码可以得出,其解析依赖关系的代码主要在pipper.py文件中。
_extract_metadata函数的作用是提取whl文件的metadata,其中就包含依赖关系;
_get_wheel_requirements函数是通过分析metadata,得出依赖关系。
其他参考
可以获取到setuptools的依赖关系,但是还有很多包含extra信息的包(这些包都不是必须的),且只能解析已安装包的
可以获取到setuptools的依赖关系,但是也只能解析已安装包的
The text was updated successfully, but these errors were encountered: