为了账号安全,请及时绑定邮箱和手机立即绑定

无法导入 sys 或 io

无法导入 sys 或 io

慕慕森 2023-04-18 15:27:13
我正在尝试导入 sys 和 io:import sysimport io但我收到以下错误:Error while compiling (offending file last):    File '/Users/username/worktest/index.py', line 11, at import of:    File '/Users/username/worktest/env/lib/python3.7/site-packages/numpy/__init__.py', line 293, at import of:    File '/Users/username/opt/anaconda3/lib/python3.7/os.py', line 1026, at import of:    File 'io', line 95, namely:        Import error, can't find any of:        /Users/username/worktest/_io/_WindowsConsoleIO.py        /Users/username/worktest/_io/_WindowsConsoleIO.js        /Users/username/worktest/env/lib/python3.7/site-packages/transcrypt/modules/_io/_WindowsConsoleIO.py        /Users/username/worktest/env/lib/python3.7/site-packages/transcrypt/modules/_io/_WindowsConsoleIO.js        /Users/username/worktest/_io/_WindowsConsoleIO.py        /Users/username/worktest/_io/_WindowsConsoleIO.js        /Users/username/opt/anaconda3/lib/python3.7/_io/_WindowsConsoleIO.py        /Users/username/opt/anaconda3/lib/python3.7/_io/_WindowsConsoleIO.js        /Users/username/opt/anaconda3/lib/python3.7/lib-dynload/_io/_WindowsConsoleIO.py        /Users/username/opt/anaconda3/lib/python3.7/lib-dynload/_io/_WindowsConsoleIO.js        /Users/username/worktest/env/lib/python3.7/site-packages/_io/_WindowsConsoleIO.py        /Users/username/worktest/env/lib/python3.7/site-packages/_io/_WindowsConsoleIO.js        /Users/username/worktest/_io.py        /Users/username/worktest/_io.js        /Users/username/worktest/env/lib/python3.7/site-packages/transcrypt/modules/_io.py        /Users/username/worktest/env/lib/python3.7/site-packages/transcrypt/modules/_io.js        /Users/username/worktest/_io.py        /Users/username/worktest/_io.js        /Users/username/opt/anaconda3/lib/python3.7/_io.py我正在尝试使用 Transcrypt 和 Wrangler 让我的 Python 脚本在 Cloudflare 的 Workers 上运行,但是这个无法导入这些模块(pypi 上不存在)的问题阻止了我这样做。在 pypi 中有没有我可以使用的替代品?如果没有,我如何在我的路径中本地安装它们。
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您使用非常非常奇怪的方法来创建字符串。


您不需要将print()其作为字符串保存在变量中 - 所以您不需要io.String()


更流行的是将所有字符串保留在列表中,然后使用"\n"


all_rows = []


for row in query_job:

    all_rows.append( "col1={}, col2={}, col3={}".format(row[0], row[1], row[2]) )


out1 = '\n'.join(all_rows)

哪个可以写成列表理解


all_rows = [ "col1={}, col2={}, col3={}".format(row[0], row[1], row[2]) for row in query_job ]


out1 = '\n'.join(all_rows)

不太流行的是直接使用 string with +=and\n


out1 = ""


for row in query_job:

     out1 += "col1={}, col2={}, col3={}".format(row[0], row[1], row[2])

     out1 += "\n"

你甚至可以"\n"直接输入"col1={}, col2={}, col3={}\n"


out1 = ""


for row in query_job:

     out1 += "col1={}, col2={}, col3={}\n".format(row[0], row[1], row[2])

顺便说一句:如果你只有 3 个元素,row那么你可以使用*in.format(*row)


out1 = ""


for row in query_job:

     out1 += "col1={}, col2={}, col3={}\n".format(*row)

或列表理解


all_rows = [ "col1={}, col2={}, col3={}".format(*row) for row in query_job ]


out1 = '\n'.join(all_rows)

甚至一行


out1 = '\n'.join([ "col1={}, col2={}, col3={}".format(*row) for row in query_job ])

顺便提一句:


如果您必须使用print()缓冲区(或文件处理程序),那么您不必更换,sys.stdout但您可以使用print(..., file=buffer)


buffer = io.StringIO()


for row in query_job:

    print("col1={}, col2={}, col3={}".format(row[0], row[1], row[2]), file=buffer)


out1 = buffer.getvalue() # 

但我不知道它是否适用于Transcrypt(and Wrangler),因为Transcrypt可能只有标准模块的一部分——只有可以转换为 JavaScript 的模块。某些函数可能无法转换,因为 JavaScript 无法访问您的磁盘(出于安全原因)并且它无法使用您的文件。


查看完整回答
反对 回复 2023-04-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

能够修改以前使用 pandas 收集输出的(非常低效的)方法:

df = pd.read_gbq(sql, project_id=project_id)

我以前不知道的更快更简单的解决方案。目前仍然与 Transcrypt 不兼容,但至少这部分已解决。


查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信