E:\ANACONDA\envs\quant_env\python.exe D:\PYproject\main.py Traceback (most recent call last): File "D:\PYproject\main.py", line 1, in <module> import akshare as ss File "E:\ANACONDA\envs\quant_env\lib\site-packages\akshare\__init__.py", line 3816, in <module> from akshare.futures.futures_sgx_daily import futures_sgx_daily File "E:\ANACONDA\envs\quant_env\lib\site-packages\akshare\futures\futures_sgx_daily.py", line 17, in <module> from akshare.index.index_investing import index_investing_global File "E:\ANACONDA\envs\quant_env\lib\site-packages\akshare\index\index_investing.py", line 10, in <module> import cfscrape File "E:\ANACONDA\envs\quant_env\lib\site-packages\cfscrape\__init__.py", line 19, in <module> from urllib3.util.ssl_ import create_urllib3_context, DEFAULT_CIPHERS ImportError: cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (E:\ANACONDA\envs\quant_env\lib\site-packages\urllib3\util\ssl_.py)
时间: 2025-03-16 15:24:47 浏览: 49
<think>嗯,用户遇到了一个Python的错误,需要帮忙解决。让我先仔细看看错误信息。
用户运行的命令是E:\ANACONDA\envs\quant_env\python.exe D:\PYproject\main.py,然后报错说在导入akshare的时候,某处引用了cfscrape,而cfscrape试图从urllib3.util.ssl_导入DEFAULT_CIPHERS时失败了。错误信息显示ImportError,无法导入这个名字。
首先,我应该考虑这个问题的可能原因。DEFAULT_CIPHERS是urllib3中的一个变量,可能在较新的版本中被移除了或者改名了。或者,用户安装的urllib3版本和cfscrape要求的版本不兼容。
接下来,我需要确认urllib3的版本情况。比如,假设用户安装了最新版本的urllib3,而cfscrape可能依赖于旧版本的urllib3,这时候就会出现导入错误。比如,在urllib3的某个版本之后,DEFAULT_CIPHERS可能被移除了,而cfscrape的代码还试图导入它。
查看一下urllib3的版本历史。比如,在urllib3 2.0.0版本之后,可能会有一些重大变化。DEFAULT_CIPHERS可能在2.0.0中被移除,或者模块结构发生了变化。如果用户安装了urllib3>=2.0.0,而cfscrape还没有适配这个版本,就会导致这个问题。
解决方案通常包括两种:降级urllib3到兼容的版本,或者升级cfscrape到支持新版本urllib3的版本。需要检查这两个库的版本兼容性。
比如,用户可以先尝试降级urllib3。比如安装urllib3的1.26.x版本,因为在这个版本中DEFAULT_CIPHERS还存在。使用pip install urllib3==1.26.15。或者,如果cfscrape有更新的版本已经适配了新的urllib3,可以升级cfscrape。
另外,akshare可能依赖特定版本的库,所以可能需要检查akshare的版本是否兼容当前的依赖环境。用户可能需要固定某些库的版本以确保兼容性。
总结步骤应该是:
1. 检查urllib3和cfscrape的当前版本。
2. 降级urllib3到兼容版本,或者升级cfscrape。
3. 重新运行程序测试是否解决。
具体操作的话,用户可以在虚拟环境中执行以下命令:
pip uninstall urllib3
pip install urllib3==1.26.15
或者,如果有可用的cfscrape新版本:
pip install --upgrade cfscrape
但需要确认是否存在这样的版本。如果cfscrape已经停止维护,可能需要另一种解决方法,比如使用替代库或者修改代码。
另外,可能还需要考虑其他依赖库是否对urllib3有版本要求,避免降级后影响其他功能。
所以,用户需要按照步骤尝试,并验证是否能解决问题。如果问题依旧,可能需要更深入检查依赖关系,或者寻求其他途径,比如更换akshare的版本,或者寻找替代的库。</think>这个错误是由于依赖库版本不兼容导致的。让我们一步步分析并解决:
1. **错误根源定位**:
错误提示显示`ImportError: cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_'`,说明当前安装的`urllib3`库版本过高,移除了`DEFAULT_CIPHERS`属性,而`cfscrape`库尚未适配新版本。
2. **解决方法**:
通过版本降级操作解决兼容性问题:
```bash
# 激活你的conda环境(假设环境名为quant_env)
conda activate quant_env
# 降级urllib3到兼容版本(1.26.x系列)
pip install urllib3==1.26.15
# 重新安装cfscrape以确保兼容性
pip install --force-reinstall cfscrape
```
3. **验证修复**:
重新运行你的脚本:
```bash
python D:\PYproject\main.py
```
4. **备用方案**:
如果仍存在问题,可以尝试以下两种方式:
- **升级`cfscrape`**:
```bash
pip install --upgrade cfscrape
```
- **使用替代库**:
在`akshare`中设置`proxies`参数替代`cfscrape`功能,例如:
```python
import akshare as ak
your_function(proxies={"http": "http://127.0.0.1:1087", "https": "http://127.0.0.1:1087"})
```
5. **环境维护建议**:
建议使用虚拟环境管理工具(如`conda`或`poetry`)固定依赖版本:
```bash
# 创建版本锁定文件
pip freeze > requirements.txt
# 后续恢复环境
pip install -r requirements.txt
```
这些操作能保持项目依赖的稳定性,避免因自动更新导致的兼容性问题。如果问题仍未解决,建议检查`akshare`官方文档确认兼容的依赖版本组合。
阅读全文
相关推荐

















