Python脚本在Sublime Text与Anaconda-Jupyter运行结果不一致问题排查
环境不一致导致Python脚本在Sublime Text与Jupyter运行异常
问题背景
有多台Windows电脑,其中一台重装最新版Python和Anaconda后,原有正常运行的Python脚本在Sublime Text/Python环境中出现多处异常,但Jupyter中运行正常。已尝试卸载重装Python、相关库及Sublime Text,也试过旧版本,问题仍存在。其他同配置电脑运行代码均正常,需定位原因并修复以统一运行结果。
异常示例1:pandas字符串替换结果不一致
执行以下pandas代码时,Sublime Text与Jupyter运行结果不同:
import pandas as pd # assign data of lists. data = {'Ticker': ['AAL', 'BRK.A', 'DAL', 'INTC']} # Create DataFrame df = pd.DataFrame(data) print(df,'\n') df['Ticker'] = df['Ticker'].str.replace('.','-', regex=True) # Print the output. print(df)
异常示例2:日期计算报错
执行持仓天数计算代码时,Sublime Text环境报错:
df_trades['Days Held'] = (df_trades['Exit Date'] - df_trades['Date']).dt.days
报错信息:
Traceback (most recent call last): File "C:\Users\Windows10i\Desktop\20230408 Backtest Design Optimised BEST ATM.py", line 865, in <module> df_trades['Days Held'] = (df_trades['Exit Date'] - df_trades['Date']).dt.days ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Windows10i\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\generic.py", line 5989, in __getattr__ return object.__getattribute__(self, name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Windows10i\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\accessor.py", line 224, in __get__ accessor_obj = self._accessor(obj) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\Windows10i\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\indexes\accessors.py", line 580, in __new__ raise AttributeError("Can only use .dt accessor with datetimelike values") AttributeError: Can only use .dt accessor with datetimelike values. Did you mean: 'at'?
排查与修复方案
1. 确认Sublime Text使用的Python环境
- 打开Sublime Text,新建测试文件输入以下代码并运行,查看输出的Python路径和pandas版本:
import sys import pandas as pd print(sys.executable) print(pd.__version__) - 对比Jupyter中运行同一代码的输出,若路径不同,说明Sublime未使用Anaconda环境,需配置Sublime的Python解释器路径为Anaconda环境下的
python.exe。
2. 检查环境变量优先级
- Windows环境变量中,系统变量的
Path里若存在多个Python路径,可能导致Sublime调用了非Anaconda的Python。将Anaconda的Scripts和python.exe所在路径移至Path最上方,重启Sublime后重试。
3. 验证pandas版本一致性
- 若示例1中Sublime的pandas版本与Jupyter不同,可能是
str.replace的行为差异(pandas版本更新后,regex参数默认值变化)。统一安装与其他正常电脑相同版本的pandas:pip install pandas==x.x.x # 替换为正常电脑的版本号
4. 检查日期列的数据类型
- 示例2报错说明日期列在Sublime环境中未被识别为datetime类型,添加代码强制转换:
df_trades['Exit Date'] = pd.to_datetime(df_trades['Exit Date']) df_trades['Date'] = pd.to_datetime(df_trades['Date']) df_trades['Days Held'] = (df_trades['Exit Date'] - df_trades['Date']).dt.days - 若其他电脑无需转换,说明Sublime环境中数据读取时未自动解析日期,需检查数据读取代码(如
pd.read_csv是否添加了parse_dates参数)。
5. 清理残留的Python环境配置
- 删除用户目录下的
__pycache__文件夹,清理Sublime Text的缓存(通过Preferences > Browse Packages找到缓存目录删除),避免旧环境残留影响。
内容的提问来源于stack exchange,提问作者SJacobs
相关产品推荐
相关产品推荐

