Py2Exe没有这个文件或目录错误。

3
我可以帮助您翻译以下内容,这是关于IT技术的:

我有一个使用外部模块(“requests”)的简单Python 2.7脚本。 我正在使用py2exe并在运行exe时遇到问题。

test.py代码如下:::

import requests
r = requests.get('https://api.github.com/')
print r.status_code
print r.text

setup.py 代码:

from distutils.core import setup
import py2exe
setup(console=['youtube.py'], options = {'py2exe': { 'packages':['requests']}})

py2exe适用于内部模块...但对于外部模块会出现错误... 错误日志:

D:\dist>youtube.exe
Traceback (most recent call last):
File "youtube.py", line 2, in <module>
File "requests\api.pyc", line 69, in get
File "requests\api.pyc", line 50, in request
File "requests\sessions.pyc", line 465, in request
File "requests\sessions.pyc", line 573, in send
File "requests\adapters.pyc", line 431, in send
requests.exceptions.SSLError: [Errno 2] No such file or directory

你读过这篇文章吗? - Thomas Lee
从cx_Freeze导入setup,可执行文件 导入requests.certs build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]} setup( name = "foo", version = "1.1", description = "这里是应用程序的描述。", options = {"build_exe": build_exe_options}, executables = [Executable("test.py")] ) - Mannan Raja
2个回答

1
问题在于函数requests.certs.where在编译时返回了一个名为cacert.pem的文件的不正确路径。使用requests.certs.where()设置requests.utils.DEFAULT_CA_BUNDLE_PATH,然后其他各种函数都导入了该变量。为了解决这个问题,您可以将C:\Python27\Lib\site-packages\requests\cacert.pem复制到包含您的exe的目录中,然后将该位置硬编码到您的requests.utils文件中。
from os.path import join, abspath
DEFAULT_CA_BUNDLE_PATH = join(abspath('.'), 'cacert.pem')

或者从您的主模块中。
import requests
from os.path import join, abspath
requests.utils.DEFAULT_CA_BUNDLE_PATH = join(abspath('.'), 'cacert.pem')

-1

可能有点晚回复了,但在您的请求中尝试设置verify=False:

import requests
r = requests.get('https://api.github.com/', verify=False)
print r.status_code
print r.text

2
你是认真建议关闭SSL验证,只为了让脚本工作吗? - umläute
@umläute 很不幸,我是。这绝不是什么安全的做法,但这是 Py2EXE 在包含 requests 库的代码上已知的问题。 - crookedleaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接