更重要的问题是:是否应该下载“尽可能多的 python 包”?这会是一个可行且实用的解决方案吗?我认为不会,原因如下:
-
PyPi 上有 LOT 的 python 包可用,这是大多数包的托管位置。在我写这个答案时,有“278,688 个项目”可用。 (注意:我知道还有其他网站可以下载软件包,但为了回答这个问题,我们只关注 PyPi)。
- 仅下载每个包的最新版本是不够的,因为某些包依赖于其他包的特定版本。所以你也必须下载这些。例如,pandas 1.1.5 depends on NumPy 1.15.4 以及其他依赖项。
- 并非所有软件包都与您的 Python 版本(例如,有些仅适用于 Python 2 而您正在使用 Python 3)、您的操作系统版本(例如,需要 Windows API 或 Linux API)或其他一些特定于环境的配置兼容(例如,需要
gcc 编译)。因此,您可能需要下载一些其他的东西才能让每个包正常工作。
-
As mentioned in Klaus D's. comment,您还需要每个下载包的文档。您将需要它们作为包使用和解决任何问题/错误的参考。您只能希望包 API 具有正确的
__doc__,以便您可以使用 help(module.function) 或者您的 IDE 可以通过智能感知向您显示。
考虑到这些因素,有一种方法可以尝试从 PyPi 中“全部下载”,前提是您有时间、网络带宽和磁盘容量来存储它们你的机器。你可以:
这是一个 Python 脚本示例:
# Dependencies: pip install requests beautifulsoup4
# Tested on 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)
# As a demo, I'm just going to install 5 random packages
# If you *really* want to install them all, remove this
# limit and the sampling of '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 文件,然后搜索 reading excel files in Python,然后下载常用的文件。如果您打算使用机器学习模型,请查找教程并记下他们在其中使用的包。
选项 2
您可以在此处查询从 PyPi 下载最多的软件包:https://pypistats.org/top。如果您对该列表不满意,请尝试使用PyPi Stats API 以获得更精细的列表。
选项 3
您可以使用预安装的 Python 包提取预构建的 Docker 映像(请参见下面的示例)。例如,datascience-notebook,“包括来自 Julia、Python 和 R 社区的数据分析库。”。对于 Web 应用程序,有这个 tiangolo/uvicorn-gunicorn-fastapi 用于使用 Uvicorn-Gunicorn-FastAPI 堆栈构建 Web 应用程序。还有更多,具体取决于用例。您可以将这些图像用作您需要哪些 Python 包的参考,或直接将它们用作您的开发环境。
$ docker pull jupyter/datascience-notebook
$ docker run -it jupyter/datascience-notebook bash
(base) jovyan@fdaf7dd9db33:~$ pip list
Package Version
----------------------------- -------------------
alembic 1.4.3
argon2-cffi 20.1.0
async-generator 1.10
attrs 20.3.0
backcall 0.2.0
backports.functools-lru-cache 1.6.1
beautifulsoup4 4.9.3
bleach 3.2.1
blinker 1.4
bokeh 2.2.3
Bottleneck 1.3.2
...