如何修改并编译已安装的Python包
先声明一下,我自己对于 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。
安装和编译的流程
- 先获取源码到本地
git clone git@github.com:ading2210/poe-api.gi
- 进入到源码的目录中,构建一个虚拟环境
# 可以参考官方文档:<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
主要做了以下事情:
- 连接到 Python 默认的 PyPI 源,查找 wheel 包
- 下载 wheel 包的压缩文件(wheel文件本身就是wheel格式)
- 解压缩文件到 Python 的 site-packages 目录
- 记录元数据使得 wheel 包可以通过 import 导入使用
- 链接 wheel/pep425tags.py 使得打包时可以查询支持的标签
通过这几步,pip 安装过程使得 wheel 包可以在当前 Python 环境中使用,从而方便后续的库打包工作。
所以简单来说,
pip install wheel
就是安装使 Python 支持 wheel 格式打包的工具,这在 distribution 和安装 Python 库时很有帮助。
-
修改源码和测试,这一步具体怎么修改就看你自己的能力了。
-
修改好了后,就可以编译和打包了
# 官方文档:<https://setuptools.pypa.io/en/latest/userguide/distribution.html> python setup.py bdist_wheel
接下来你会看到你源码文件夹中的 dist 文件夹中有 package_name-version-py3-none-any.whl 这个文件,说明这个文件就是 wheel 包。
-
卸载掉原来安装的包。这里注意,你现在还在虚拟环境中,你需要在正式环境中去卸载。
pip uninstall package-name
- 安装 wheel 包
# 这个时候请注意,你可能还在虚拟环境中,你先复制这个包出去正式环境中
cp dist/pkgname-version-py3-none-any.whl /path/to/project
# 再继续安装
pip install package_name-version-py3-none-any.whl
总结
整个流程就是这样了,有个注意点就是,最后两步的时候,卸载旧包和安装新包的时候都是需要离开虚拟环境来做,完结撒花🎉。
转载自:https://juejin.cn/post/7258772295132282935