【问题标题】:Is there a quick way to download all available packages for python?有没有一种快速的方法来下载所有可用的 python 包?
【发布时间】:2020-12-20 16:57:53
【问题描述】:

我需要为我的机器下载尽可能多的 python 包,因为它无法访问互联网。现在下载了pandas、matplotlib、numpy、xlrd、xlwt等常用包,怕以后还需要一些其他的包。有没有快速安装尽可能多的软件包的方法?

我正在使用 PyCharm 和 Anaconda,它已经预装了一些软件包。我下载包的方式是去设置/项目/Python解释器,然后点击+号。

【问题讨论】:

  • 在 pypi 上发布了 LOT 的包。不确定全部下载它们的可行性(时间方面,大小方面)。您需要预测您需要哪些,这取决于您正在/将要从事的项目。我们无法预测未来(AFAIK),一种选择可能是下载最受欢迎的下载包(pypistats.org/top
  • 不要忘记打印出所有文档。 ;)
  • 您是说您将开发无法访问互联网的python代码,但不知道您将开发什么样的代码?部署应用程序后,您应该知道依赖关系,并且不需要互联网。
  • 请注意,“所有 Python 包”,即使只是查看 pypi,也包括已弃用和冲突的包。由于您明确想要安装所有这些包,这实际上是不可能的。

标签: python python-3.x


【解决方案1】:

更重要的问题是:是否应该下载“尽可能多的 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 中“全部下载”,前提是您有时间、网络带宽和磁盘容量来存储它们你的机器。你可以:

  • 向 PyPi 索引发送 GET 请求:https://pypi.python.org/simple/
  • 解析每个包链接:
    <a href=/simple/packagename>packagename</a>
    
  • 从链接中解析packagename
  • 使用pip(或conda 或您使用的任何包管理器)安装它
    pip install packagename
    

这是一个 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
...

【讨论】:

  • 非常感谢您提供如此详细的回答。你是一个真正的MVP。我会解决这个问题的!
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2012-03-09
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多