【问题标题】:how can I monkey-patch pathlib on python 3.5, 3.6, 3.7 to get same functionality like in python 3.8?如何在 python 3.5、3.6、3.7 上对 pathlib 进行猴子补丁,以获得与 python 3.8 中相同的功能?
【发布时间】:2020-06-17 18:31:21
【问题描述】:

我在我的库开发软件中使用pathlib - 但不幸的是,我的 travis 矩阵刹车,因为在一些较旧的 python 版本(3.5 - 3.7)上 pathlib.Path 与最新的 3.8 版本不兼容。

例如,以下将适用于 python 3.8,但不适用于 3.6、3.7 等:

>>> path_test_file = pathlib.Path('./tests/mytest.txt')
>>> path_test_file.unlink(missing_ok=True)

有没有方便的方法通过 requirements.txt、pip 等升级pathlib 库?

我还尝试对旧版本的pathlib 进行猴子补丁,但失败得很惨。

正如@jakub 指出的那样,当然有程序化的解决方案,比如:

if path_test_file.exits(): 
    path_test_file.unlink()

# or:
try:
    path_test_file.unlink()
except Exception:
    pass

这真的很清楚,不需要答案 - 但我不想像那样混乱我的代码。 如果需要,我宁愿包含一些模块和猴子补丁pathlib.Path,并保留所有其他代码 - 并且仍然与旧的 python 版本兼容。

也许我应该顶一下https://github.com/KenKundert/extended_pathlib/blob/master/extended_pathlib.py

【问题讨论】:

  • pathlib 是 Python 标准库的一部分,我认为它不能单独更新。
  • @jakub 自 2020 年 1 月 1 日起,此存储库将不再收到任何进一步的更新,因为不再支持 Python 2。
  • @jakub,pathlib2 在 windows 上也有 unicode 字符的严重问题,这是没有选择的
  • 在这种情况下,我建议编写一些适用于您需要的 python 版本的东西。以Path.unlink(missing_ok=True) 为例,您可以使用try-except 来说明丢失的文件,然后您可以删除python 3.8 中新增的missing_ok 关键字。

标签: python upgrade python-3.7 python-3.8 pathlib


【解决方案1】:

我刚刚将 python3.8 pathlib 文件复制到一个新包中,并调整了几行,使其可以像 pathlib 一样工作。

现在您也可以在 3.6、3.7 中使用所有 python3.8 pathlib 好东西

您可以在 githubpypi 上找到它


免责声明:我是 pathlib3x 库的作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多