Python 打包 exe 无法使用 socks5 代理,疑似功能包打包失败

2022-10-19 14:21:52 +08:00
 PEax
1.已经安装了 requests[socks] 包,代码运行没问题
2.pyinstaller 打包 exe 后打开,使用 socks5 代理提示: [ Missing dependencies for SOCKS support.]
3.怀疑是 sock 包没打包进去,手动引入 import socks, 打包后提示 [ No module named 'socks']

google 查阅,没有相关的资料,有大佬遇到过吗
2123 次点击
所在节点    Python
12 条回复
masker
2022-10-19 14:26:11 +08:00
pyinstaller -p
指向你的 site-packages 路径
fbichijing
2022-10-19 14:41:10 +08:00
因为没有代码,场景无法复现。

不过最近的 pyinstaller 似乎有些问题,我用最新版本的 pyinstaller 打包的时候也出现了一些莫名其妙的错误。由此我一般都将 pyinstaller 回退到以前的版本,4.9 还是 5.1 ,不知道最新版本有没有修好了。个人之见。
PEax
2022-10-19 18:29:38 +08:00
@fbichijing
import requests
res = requests.get('https://www.baidu.com', proxies={"http": "socks5://127.0.0.1:5500", "https": "socks5://127.0.0.1:5500"})
print(res.text)

pyinstaller -F xxx.py

就是最简单的访问,就这几行代码
fbichijing
2022-10-19 18:37:01 +08:00
@PEax 我记得要使用 socks5 代理还要加个 h 。

python 3.8
pyinstaller 4.9


```python
import os
import requests
from lxml import etree

url = 'https://google.com'
proxies = {"http": "socks5h://127.0.0.1:1080",
"https": "socks5h://127.0.0.1:1080"}
res = requests.get(url, proxies=proxies)

response = etree.HTML(res.text)
print(response.xpath('//title/text()'))
os.system('pause')
```
fbichijing
2022-10-19 18:40:52 +08:00
@PEax

打包一切正常,上面的回复点得太快,话还没说完就发出去了......
PEax
2022-10-19 19:03:10 +08:00
@fbichijing 我发现是我 mac 用虚拟机打包的问题,我换成 win 就不会了,并且加上 h 就好了!,谢谢大佬
ysc3839
2022-10-19 20:19:36 +08:00
@fbichijing socks5h 是 curl 的写法,其他库不一定支持
https://curl.se/libcurl/c/CURLOPT_PROXY.html
fbichijing
2022-10-19 20:31:18 +08:00
@ysc3839 requests 需要。https://stackoverflow.com/questions/12601316/how-to-make-python-requests-work-via-socks-proxy#answer-15661226 评论里也有讨论。我仅记得当时我也遇到了什么报错,查找了很多网页,有看到过一个网页写了很详细的解释。时间过于久远,当时我也没有记笔记或者保存脱机页面的习惯。后来就只留下这里加一个 h 就不会报错的印象在脑海里......^_^
laqow
2022-10-19 21:47:36 +08:00
pyinstaller 打包在 import 时可能要具体到函数,用 form requests import get, res = get('https://www.baidu.com', proxies={"http": "socks5://127.0.0.1:5500", "https": "socks5://127.0.0.1:5500"}) 可能就行了
gablic
2022-10-20 09:35:16 +08:00
怀疑环境问题,试试指定 pyinstaller 和 site-packages 的目录
python "pyinstaller.exe 路径" --onefile --path "site-packages 路径" xxx.py
ungrown
2022-10-20 11:32:11 +08:00
@fbichijing #8 也就是说其实不是“漏库”的原因,而是 scheme 相关的 trick
rev1si0n
2022-10-20 15:30:18 +08:00
直接在入口脚本先

import socks
import sockshandler

然后再打包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX