有没有一种快速下载所有可用的Python软件包的方法?
有没有一种快速的方法来下载所有可用的Python包?这是一个常见的问题,原因如下:
1. 在PyPi上有大量的Python包可用,作为大多数包的托管地。截至我写这篇文章时,有278,688个项目可用。
2. 仅仅下载每个包的最新版本是不够的,因为某些包依赖于其他包的特定版本。因此,您还需要下载这些依赖包。例如,pandas 1.1.5依赖于NumPy 1.15.4等其他依赖项。
3. 并非所有的包都与您的Python版本兼容(例如,某些包仅适用于Python 2,而您正在使用Python 3),或者与您的操作系统版本兼容(例如,需要Windows API或Linux API),或者与其他特定环境配置兼容(例如,需要gcc进行编译)。因此,您可能需要下载其他内容才能使每个包正常工作。
4. 您还需要每个下载的包的文档,作为包使用的参考和解决任何问题/错误的参考。您只能希望包的API具有适当的`__doc__`,以便您可以使用`help(module.function)`或者您的IDE可以通过智能感知向您显示。
考虑到这些因素,有一种方法可以尝试从PyPi上“全部下载”,假设您有时间、网络带宽和磁盘容量来将它们全部存储在您的计算机上。您可以:
1. 向PyPi索引发送GET请求:https://pypi.python.org/simple/。
2. 解析每个包的链接。
3. 从链接中解析出包名。
4. 使用pip(或conda或您使用的其他软件包管理器)进行安装。
以下是一个示例的Python脚本:
# 依赖项:pip install requests beautifulsoup4 # 在Python3.8.6、beautifulsoup4==4.9.3、requests==2.25.1上测试通过 import random import requests import subprocess from bs4 import BeautifulSoup pypi_index = 'https://pypi.python.org/simple/' print(f'GET list of packages from {pypi_index}') try: resp = requests.get(pypi_index, timeout=5) except requests.exceptions.RequestException: print('ERROR: Could not GET the pypi index. Check your internet connection.') exit(1) print(f'NOW parsing the HTML (this could take a couple of seconds...)') try: soup = BeautifulSoup(resp.text, 'html.parser') body = soup.find('body') links = (pkg for pkg in body.find_all('a')) except: print('ERROR: Could not parse pypi HTML.') exit(1) # 作为演示,我只安装5个随机包 # 如果您真的想要全部安装,删除这个限制和'list(links)'的抽样 install_limit = 5 some_of_the_links = random.sample(list(links), install_limit) for link in some_of_the_links: pkg_name = link['href'].split('/')[-2] cmd = f'pip install {pkg_name}' # Replace with `conda` for Anaconda print("=" * 30) print(f'NOW installing "{pkg_name}"') try: subprocess.run(cmd.split(), check=True) except subprocess.CalledProcessError: print(f'ERROR: Failed to install {pkg_name}') continue
请注意,我将脚本限制为仅安装5个随机包。删除`install_limit`以真正安装全部包,但请注意,并非每个安装都会成功,因为正如我在开头所说的,有些包是损坏的或与您的系统不兼容,或者它们彼此之间不兼容。
除了“全部下载”之外,其他的替代方法有:
选项1:您必须为您正在/将要处理的Python项目做出适当的规划。虽然我们无法预测未来,但我们可以对可能需要的东西进行研究。例如,如果您计划处理Excel文件,请搜索“在Python中读取Excel文件”,然后下载常见提到的包。如果您计划在机器学习模型上工作,请查找教程并注意在那里使用的包。
选项2:您可以在此处查询从PyPi下载的最多的包:https://pypistats.org/top。如果您对该列表不满意,可以尝试使用PyPi统计API获取一个更精细调整的列表。
选项3:您可以获取预安装了Python包的预构建Docker镜像(请参考上面的示例)。例如,有这个datascience-notebook,它“包括来自Julia、Python和R社区的用于数据分析的库”。对于Web应用程序,有这个使用Uvicorn-Gunicorn-FastAPI堆栈构建Web应用程序的tiangolo/uvicorn-gunicorn-fastapi。根据用例,还有许多其他镜像。您可以将这些镜像用作您所需的Python包的参考,或直接将它们用作您的开发环境。
总结起来,虽然有一种方法可以尝试从PyPi上“全部下载”包,但这并不是一个可行和实际的解决方案。根据您的需求和项目要求,您可以选择合适的方法来下载和安装所需的Python包。