今天尝试用tushare写了一个股票的监听脚本,但是想打包成exe的时候就报了 'utf-8' codec can't decode byte 0xd7 in position 2556: invalid continuation byte 这个错误
这个是完整代码
import tushare as ts
import datetime
import sys
import time
import schedule
import smtplib
from email.mime.text import MIMEText
def get_now_jiage(code):
df = ts.get_realtime_quotes(code)[['name', 'price', 'pre_close', 'date', 'time']]
return df
def pd_ztjytime():
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
now_datetime = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')
d1 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d') + ' 11:30:01', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d') + ' 13:00:00', '%Y-%m-%d %H:%M:%S')
delta1 = (now_datetime - d1).total_seconds()
delta2 = (d2 - now_datetime).total_seconds()
if delta1 > 0 and delta2 > 0:
return True
else:
return False
def do_programe(code, cbj, shuliang, e_mail):
if not pd_ztjytime():
info = get_now_jiage(code)
now_jiage = float(info['price'][0])
name = info['name'][0]
pre_close = float(info['pre_close'][0])
riqi = info['date'][0]
sj = info['time'][0]
now_zdie = round((now_jiage - pre_close) / pre_close * 100, 2)
all_zdie = round((now_jiage - cbj) / cbj * 100, 2)
now_shizhi = round(shuliang * now_jiage, 2)
ykui = round(now_shizhi - cbj * shuliang, 2)
if (3 <= abs(now_zdie) < 3.09) or (6 <= abs(now_zdie) < 6.05) or (9 <= abs(now_zdie) < 9.1):
email_comment = ['<html>', '<b><p><h3><font size="2" color="black">您好:</font></h4></p></b>',
'<p><font size="2" color="#000000">根据设置参数,现将监控到' + name + '(' + str(
code) + ')的证券价格异动消息汇报如下:</font></p>',
'<table border="1px" cellspacing="0px" width="600" style="border-collapse:collapse">',
'<tr>', '<td align="center"><b>序号</b></td>', '<td align="center"><b>购买单价</b></td>',
'<td align="center"><b>持股数</b></td>', '<td align="center"><b>现价</b></td>',
'<td align="center"><b>现涨跌幅</b></td>', '<td align="center"><b>总涨跌幅</b></td>',
'<td align="center"><b>现市值</b></td>', '<td align="center"><b>盈亏额</b></td>',
'<td align="center"><b>异动时间</b></td>', '</tr>', '<tr>',
'<td align="center">' + str(1) + '</td>', '<td align="center">' + str(cbj) + '</td>',
'<td align="center">' + str(shuliang) + '</td>',
'<td align="center">' + str(now_jiage) + '</td>',
'<td align="center">' + str(now_zdie) + '%</td>',
'<td align="center">' + str(all_zdie) + '%</td>',
'<td align="center">' + str(now_shizhi) + '元</td>',
'<td align="center">' + str(ykui) + '元</td>',
'<td align="center">' + str(riqi) + ' ' + str(sj) + '</td>', '</tr>', '</table>',
'<p><font size="2" color="black">祝:股市天天红,日日发大财!</font></p>', '</html>']
send_msg = '\n'.join(email_comment)
sendEmail(e_mail, send_msg)
def sendEmail(e_mail, content):
mail_host = "smtp.163.com"
mail_user = "帐号"
mail_pass = "密码"
sender = '发送邮箱'
receivers = [
e_mail
]
title = '股市监听机器人'
message = MIMEText(content, 'html', 'utf-8')
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功,注意查收")
except smtplib.SMTPException as e:
print(e)
def run(code, price, num, e_mail):
while True:
do_programe(code, price, num, e_mail)
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
d1 = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d') + ' 15:00:00', '%Y-%m-%d %H:%M:%S')
delta = d2 - d1
if delta.total_seconds() <= 0:
sys.exit()
time.sleep(1)
if __name__ == '__main__':
print("本脚于每日9:30至15:00进行监听")
code = input("请输入需要监控的股票编号")
price = input("请输入买入单价")
num = input("请输入持股数")
e_mail = input("请输入邮箱")
schedule.every().day.at("09:30").do(run(str(code), float(price), num, str(e_mail)))
while True:
schedule.run_pending()
time.sleep(1)
这个是完整的报错信息
Traceback (most recent call last):
File "F:\python\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "F:\python\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "E:\www_py\venv\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
File "e:\www_py\venv\lib\site-packages\PyInstaller\__main__.py", line 124, in run
run_build(pyi_config, spec_file, **vars(args))
File "e:\www_py\venv\lib\site-packages\PyInstaller\__main__.py", line 58, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "e:\www_py\venv\lib\site-packages\PyInstaller\building\build_main.py", line 782, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "e:\www_py\venv\lib\site-packages\PyInstaller\building\build_main.py", line 714, in build
exec(code, spec_namespace)
File "E:\www_py\机器人.spec", line 19, in <module>
noarchive=False)
File "e:\www_py\venv\lib\site-packages\PyInstaller\building\build_main.py", line 277, in __init__
self.__postinit__()
File "e:\www_py\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 155, in __postinit__
self.assemble()
File "e:\www_py\venv\lib\site-packages\PyInstaller\building\build_main.py", line 439, in assemble
priority_scripts.append(self.graph.add_script(script))
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 265, in add_script
self._top_script_node = super().add_script(pathname)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1433, in add_script
self._process_imports(n)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2850, in _process_imports
target_module = self._safe_import_hook(*import_info, **kwargs)[0]
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2303, in _safe_import_hook
target_attr_names=None, level=level, edge_attr=edge_attr)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1506, in import_hook
source_package, target_module_partname, level)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1685, in _find_head_package
target_module_headname, target_package_name, source_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 387, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2062, in _safe_import_module
self._process_imports(n)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2850, in _process_imports
target_module = self._safe_import_hook(*import_info, **kwargs)[0]
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2303, in _safe_import_hook
target_attr_names=None, level=level, edge_attr=edge_attr)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1518, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 387, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2062, in _safe_import_module
self._process_imports(n)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2850, in _process_imports
target_module = self._safe_import_hook(*import_info, **kwargs)[0]
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2303, in _safe_import_hook
target_attr_names=None, level=level, edge_attr=edge_attr)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1518, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 387, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2062, in _safe_import_module
self._process_imports(n)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2850, in _process_imports
target_module = self._safe_import_hook(*import_info, **kwargs)[0]
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2303, in _safe_import_hook
target_attr_names=None, level=level, edge_attr=edge_attr)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1518, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 387, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2062, in _safe_import_module
self._process_imports(n)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2850, in _process_imports
target_module = self._safe_import_hook(*import_info, **kwargs)[0]
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2303, in _safe_import_hook
target_attr_names=None, level=level, edge_attr=edge_attr)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1518, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "e:\www_py\venv\lib\site-packages\PyInstaller\depend\analysis.py", line 387, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2053, in _safe_import_module
(module, co) = self._load_module(module_name, pathname, loader)
File "e:\www_py\venv\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2143, in _load_module
src = loader.get_source(partname)
File "<frozen importlib._bootstrap_external>", line 783, in get_source
File "<frozen importlib._bootstrap_external>", line 566, in decode_source
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 2556: invalid continuation byte
已经输入了chcp 65001 和 移除所有注释但是仍然报错
试试在代码开头加# encoding = utf-8
有没有可能是版本问题
专门注册账户来回答你这个问题:
你使用的 tushare 的版本是 1.2.78 (Dec 12 2021 发布的),如果你没有用特别的功能。
建议把 tushare 和 pyinstaller 的版本都降低一点:
# 启动你的python env,安装旧版本
pip uninstall tushare pyinstaller
pip install tushare==1.2.62
pip installer pyinstaller==4.4
类似的问题可以尝试,切换 python 版本,或者降低package的版本来试一试,改源码的话也可以,不过有点得不偿失。
题主可以去 Github 提个Issue,也许开发团队稍后可以修正这个问题:
https://github.com/waditu/tushare
降低tushare的版本会打包成功,但是tushare请求数据的时候,会提示403错误
我现在用的是1.2.84,一样提示错误如下
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 2556: invalid continuation byte
问题解决了么?我也碰到了同样的问题