Python 脚本在 Windows 的 Ubuntu 子系统中失败 - ModuleNotFoundError

Python script fails in Ubuntu subsystem in Windows - ModuleNotFoundError

您好,我正在尝试在 Windows 中启用的 Ubuntu 子系统中执行 python 脚本。

我想这样做的原因是因为我每天安排 crontab 到 运行 这个脚本。

我遇到的问题是,当我在正常 Windows 终端上 运行 时通过的相同脚本在 ubuntu 终端上失败。在这两种情况下,我都使用 Pyhon3 执行。

问题似乎与我处理 json 数据的方式有关。

代码的作用是获取 API 调用 returns 的响应,在 tablib 的帮助下将其内容添加到 excel 文件中 library 我已经安装了。

call_api_call方法returnsjson这种形式:return json.loads(response.text)

代码的相关部分:

dataset_list = call_api_call() 

data = tablib.Dataset()

data.json = json.dumps(dataset_list)
data_export = data.export('xlsx')

filename = os.path.dirname(os.path.realpath(__file__)) + '_' + str(datetime.date.today()) + '.xlsx'

with open(filename, 'wb') as f:  
  f.write(data_export)  # write issues to the xlsx file

运行 来自 Windows 在 Ubuntu 终端上:

执行方式:

python3  /mnt/c/Users/marialena/source/repos/GitLab_Issues/gitlab.py -vs

输出:

Traceback (most recent call last):
  File "/mnt/c/Users/marialena/source/repos/GitLab_Issues/gitlab.py", line 93, in <module>
    data1 = json.loads(list_with_bugs)
  File "/usr/lib/python3.6/json/__init__.py", line 348, in loads
    'not {!r}'.format(s.__class__.__name__))
TypeError: the JSON object must be str, bytes or bytearray, not 'dict'

运行 来自 Windows 普通终端:

执行方式:

PS C:\Users\marialena\source\repos\GitLab_Issues> python .\gitlab.py

输出: 没有错误,文件创建没有问题。


更新: 我在 unix 子系统中使用以下命令将 python 从 3.6.8 更新为 3.7.3 以匹配 windows 版本(在我再次安装 tablib 之后 python3.7 -m pip install tablib)

python3.7  /mnt/c/Users/marialena/source/repos/GitLab_Issues/gitlab.py -vs

当我现在执行我得到的脚本时

   Traceback (most recent call last):
  File "/mnt/c/Users/marialena/source/repos/GitLab_Issues/gitlab.py", line 93, in <module>
    data.json = json.dumps(list_with_bugs)
  File "/usr/local/lib/python3.7/dist-packages/tablib/formats/_json.py", line 39, in import_set
    dset.dict = json.loads(in_stream)
  File "/usr/local/lib/python3.7/dist-packages/tablib/core.py", line 381, in _set_dict
    if isinstance(pickle[0], list):
KeyError: 0
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/mnt/c/Users/marialena/source/repos/GitLab_Issues/gitlab.py", line 93, in <module>
    data.json = json.dumps(list_with_bugs)
  File "/usr/local/lib/python3.7/dist-packages/tablib/formats/_json.py", line 39, in import_set
    dset.dict = json.loads(in_stream)
  File "/usr/local/lib/python3.7/dist-packages/tablib/core.py", line 381, in _set_dict
    if isinstance(pickle[0], list):
KeyError: 0

apt_pkg 的回溯处有一个 ModuleNotFoundError

您可以尝试重新安装该软件包,并检查它是否有效。

sudo apt-get remove --purge python-apt
sudo apt-get install python-apt