【正文】

1. 什么是%Appdata%

AppData是一个文件夹的名称。

%Appdata% 是Windows设定的变量,默认情况下指向应用程序存储数据的位置。

它的作用是提供一个统一的路径,用于存储应用程序的配置文件、临时文件、日志文件等数据。

%Appdata%就代表了C:Users\用户名\AppData这个文件夹。

%是系统变量的一种表示方法。

2. 手动查找库/模块的安装路径

以查找requests库的安装源文件为例。

  1. 【win】+【R】打开【运行】。

  2. 在【打开(O)】后的框中输入:

%Appdata%
  1. 点击【确定】。

在这里插入图片描述

  1. 确定后打开了一个【Roaming】文件夹。

在这里插入图片描述

  1. 点击打开的文件夹的上一级文件夹,即点击【AppData】。

  2. 点击【Local】文件夹。

  3. 点击【Programs】文件夹。

  4. 点击【Python】文件夹。

  5. 点击【Python39】文件夹。

  6. 点击【lib】文件夹。

lib:库文件。

  1. 点击【site-packages】文件夹。

site [saɪt]:站点。

packpage[ˈpækɪdʒ]:包。

在Python的安装目录下面,有个专门的文件夹叫做【site-packpae】,用于安装各种Python工具包。

这些直接安装在【site-packpage】里面的工具包,就叫做站点包。

我们安装的各种包的源文件可以就可以在这个文件夹里找到。

  1. 点击【requests】文件夹。

【备注】

这里要点击的文件夹就是库的名称。

如果你要查找numpy库,那你就需要找到【numpy】文件夹。

requests文件夹里存放的就是requests的源文件。如下图所示:

在这里插入图片描述

【总结】

每安装一个第三方库都会在【site-packages】文件夹形成一个新文件夹。

已经安装的库或模块以源代码的形式存放在【Python39】-【lib】-【site-packages】文件夹里。

第三方库中的可以执行的程序存放在【Python39】-【Scripts】文件夹里。

Scripts[skrɪpts]:脚本。

【实操练习】

大家安装一个没有安装过的第三库,观察【Scripts】和【site-packages】文件夹的变化。

这里以安装numpy为例。

numpy是一个用来处理多维数组的包。

安装前大家检查【Scripts】里是否有f2py.exe的文件。

【site-packages】文件夹里是否有numpy文件夹。

【步骤流程】

  1. 先打开【Scripts】和【site-packages】文件夹。

  2. 点击任务栏中的放大镜

  3. 在搜索框中输入【cmd】。

  4. 右键单击【命令提示符】。

  5. 选择【以管理员身份运行】。

在这里插入图片描述

  1. 在【命令提示符】界面输入下面的安装命令:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ numpy

【命令解析】

install [ɪnˈstɔːl]:安装。

  • pip: 是Python的包管理工具,用于安装、升级和卸载Python包。
  • install: 是pip的一个子命令,用于安装Python包。
  • -i: 是pip install的一个选项,用于指定包的索引地址。
  • https://pypi.tuna.tsinghua.edu.cn/simple/: 是一个包的索引地址,指定了从该地址下载包,可以替换成其它地址。
  • numpy是库名,这里替换成你要安装的任何库名。
  • 注意库名和前面的索引地址之间有1个空格。
  1. 回车安装完包后我们看到【Scripts】文件夹里有如下变化:

在这里插入图片描述

【Scripts】文件夹多了一个f2py.exe的程序,这是一个可以执行的numpy工具。

【site-packages】文件夹多了一个numpy的文件夹,numpy的文件夹里面有多个.py文件。

在这里插入图片描述

3.实操练习-查找bs4库安装源文件

大家用本节第一点的方法找到bs4库的安装源文件夹,并保存到桌面或其他盘备用。

【得到的bs4文件夹如下所示】

在这里插入图片描述

4.源文件的应用

【代码示例】

下面的代码向某网页发送了一个请求,并返回了网页的源代码。

大家注意看最后一行代码。

import requests
url = 'http://python123.io/ws/demo.html'

# r是变量名,数据类型为Response对象
r = requests.get(url)

# 查看对象的属性语法:对象.属性
# r是对象名
# text是Response对象的属性,作用是输出网页源代码,类型为字符串数据
html = r.text

# bs4是库名
# BeautifulSoup是bs4库的类
# 导入bs4库的BeautifulSoup类
from bs4 import BeautifulSoup

# BeautifulSoup是类名
# html是要解析的对象,这里存储的HTML网页源代码
# html.parser是解析器的名称
soup = BeautifulSoup(html, "html.parser")
print(soup.prettify)

大家观察最后一行代码:

print(soup.prettify)

假设我们不知道prettify的作用,我们可以这样做:

这里以vscode编辑器为例。

将鼠标光标移动到该单词上面,我们可以看到如下的界面:

在这里插入图片描述

全选这段英文释义,复制如下:

(method)
def prettify(
    encoding: str,
    formatter: str | Formatter = "minimal"
) -> bytes: ...

def prettify(
    encoding: None = None,
    formatter: str | Formatter = "minimal"
) -> str: ...
Pretty-print this PageElement as a string.

:param encoding: The eventual encoding of the string. If this is None,
    a Unicode string will be returned.
:param formatter: A Formatter object, or a string naming one of
    the standard formatters.
:return: A Unicode string (if encoding==None) or a bytestring
    (otherwise).

去源文件中查找该方式的释义:

  • 用vscode编辑器打开【bs4】文件夹。

  • 任意打开里面的.py文件。

  • 按【CTRL+F】。

  • 在打开的搜索框中输入【prettify】。

  • 如果.py文件里没有【prettify】想关内容,会显示无结果。

大家可以依次打开.py文件,查找相关内容。

我最终在【element.py】文件中找到该方法的相关内容,代码如下:

def prettify(self, encoding=None, formatter="minimal"):
    """Pretty-print this PageElement as a string.

    :param encoding: The eventual encoding of the string. If this is None,
        a Unicode string will be returned.
    :param formatter: A Formatter object, or a string naming one of
        the standard formatters.
    :return: A Unicode string (if encoding==None) or a bytestring
        (otherwise).
    """
    if encoding is None:
        return self.decode(True, formatter=formatter)
    else:
        return self.encode(encoding, True, formatter=formatter)

对比上下两段代码,我们发现内容是一致的。

prettify[ˈprɪtɪfʌɪ]:使…表面看上去美丽;粉饰。

PageElement页面元素。

param [ˌpærəˈm]:参数。

因为源文件的代码是上下联系的,多个.py文件也是相互联系的,且我水平有限,对上面的代码仅做一个大概的解析。

【英文注释部分的翻译

这段代码定义了一个名为prettify的方法,用于将PageElement对象以漂亮的格式打印为字符串。

该方法有两个参数:encoding和formatter。encoding参数用于指定字符串的编码方式,如果为None,则返回一个Unicode字符串;否则返回一个字节字符串。formatter参数用于指定格式化的方式,可以是一个Formatter对象或者一个字符串表示的标准格式化方式。

如果encoding为None,则调用PageElement对象的decode方法,并传入True和formatter参数,返回一个Unicode字符串。

否则,调用PageElement对象的encode方法,并传入encoding、True和formatter参数,返回一个字节字符串。

【感受代码】

def prettify(self, encoding=None, formatter="minimal"):
    if encoding is None:
        return self.decode(True, formatter=formatter)
    else:
        return self.encode(encoding, True, formatter=formatter)

大家可以感受下上面这段代码的框架,参数。

认真分析下来好像也很简单,是不是你也能写。

【碎碎念】

个人建议大家有空可以多看看源文件中的代码。目标不是看懂,有空就看一段,看一个它定义的类,定义的方法,感受它的框架结构,参数的设定,类、方法的调用引用。

我喜欢看源代码,经常看对编写程序有一定的作用,思维方面、语法方面都会有很大的进步。

这感觉有点像高中时看优秀的文章一样,多看多写总能进步的。

读书破万卷下笔如有神,在学习Python中我感觉也有用。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐