likes
comments
collection
share

如何修改并编译已安装的Python包

作者站长头像
站长
· 阅读数 13

先声明一下,我自己对于 python 的使用比较少,所以对于很多高阶的使用都不懂,如果你比较熟悉 python 的话,可以不用继续看了。

背景

在使用 poe-api 的包的时候,报了一个错。

Traceback (most recent call last):
  File "/Users/yuxh-mac/Desktop/work/openSource/dealer_info/transcript.py", line 5, in <module>
    client = poe.Client("xxxxx", proxy="<http://127.0.0.1:7890>")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/poe.py", line 155, in __init__
    self.connect_ws()
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/poe.py", line 413, in connect_ws
    self.setup_connection()
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/poe.py", line 181, in setup_connection
    self.next_data = self.get_next_data(overwrite_vars=True)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/poe.py", line 229, in get_next_data
    self.formkey = self.extract_formkey(r.text)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/poe.py", line 206, in extract_formkey
    script_text = re.search(script_regex, html).group(1)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'group'

首先介绍下这个 package 是做什么的?就是用来使用各种 AI 模型接口的,比如,claude 100K,GPT-4 32k 等等。是不是很兴奋,你拼命申请的各种 access 都申请不到,这个 package 可以帮你免费使用。

ok,废话少说,实际上这个报错一出来,我也不知道是什么意思,所以去看 issues ,看看有没有人已经提出来或者解决了。

的确看到别人已经提出来了:github.com/ading2210/p… merge 到仓库中,所以你想更新包是暂时更新不了的。 另一种方法就是,修改你本地已经已经安装的 python 的 package,并且重新编译。

ok,终于来到正题了。现在都有各种 AI 助手了,我还会去 google 吗?太浪费时间了,直接问起 claude。

安装和编译的流程

  1. 先获取源码到本地
git clone git@github.com:ading2210/poe-api.gi
  1. 进入到源码的目录中,构建一个虚拟环境
# 可以参考官方文档:<https://docs.python.org/3/library/venv.html>
python -m venv venv

# 可以参考:<https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/>
source venv/bin/activate

pip install wheel

这里的 pip install wheel 是做了什么呢?

pip install wheel 这个命令是用于安装 Python 的 wheel 打包工具。

pip 是 Python 的默认包管理器,pip install 用来安装 Python 包。

wheel 是一种 Python 库打包格式,相比 .egg 格式,它具有以下优点:

  • 文件名中包含包的版本号,支持并行安装多个版本
  • 支持 Python 的 PEP-427 标准,内容更规范化
  • 内部文件结构更合理,安装速度更快

所以 pip install wheel 主要做了以下事情:

  1. 连接到 Python 默认的 PyPI 源,查找 wheel 包
  2. 下载 wheel 包的压缩文件(wheel文件本身就是wheel格式)
  3. 解压缩文件到 Python 的 site-packages 目录
  4. 记录元数据使得 wheel 包可以通过 import 导入使用
  5. 链接 wheel/pep425tags.py 使得打包时可以查询支持的标签

通过这几步,pip 安装过程使得 wheel 包可以在当前 Python 环境中使用,从而方便后续的库打包工作。

所以简单来说,pip install wheel 就是安装使 Python 支持 wheel 格式打包的工具,这在 distribution 和安装 Python 库时很有帮助。

  1. 修改源码和测试,这一步具体怎么修改就看你自己的能力了。

  2. 修改好了后,就可以编译和打包了

    # 官方文档:<https://setuptools.pypa.io/en/latest/userguide/distribution.html>
    python setup.py bdist_wheel
    

    接下来你会看到你源码文件夹中的 dist 文件夹中有 package_name-version-py3-none-any.whl 这个文件,说明这个文件就是 wheel 包。

  3. 卸载掉原来安装的包。这里注意,你现在还在虚拟环境中,你需要在正式环境中去卸载。

pip uninstall package-name
  1. 安装 wheel 包
# 这个时候请注意,你可能还在虚拟环境中,你先复制这个包出去正式环境中
cp dist/pkgname-version-py3-none-any.whl /path/to/project
# 再继续安装
pip install package_name-version-py3-none-any.whl

总结

整个流程就是这样了,有个注意点就是,最后两步的时候,卸载旧包和安装新包的时候都是需要离开虚拟环境来做,完结撒花🎉。