支持一个python包的两个版本,无需客户端更改代码
我试图在不影响客户端代码的情况下支持多个版本的 python 包。
考虑以下回购:
.
|-- client_code.py
`-- lib
|-- __init__.py
`-- foo.py
.
|-- client_code.py
`-- lib
|-- __init__.py
`-- foo.py
客户端代码.py:
我想client_code.py保持不变。我首先尝试做这样的事情:
lib
|-- __init__.py
|-- v1
| |-- __init__.py
| `-- foo.py
`-- v2
|-- __init__.py
`-- foo.py
lib
|-- __init__.py
|-- v1
| |-- __init__.py
| `-- foo.py
`-- v2
|-- __init__.py
`-- foo.py
lib/__init__.py :
from lib.foo import f
...
f()
但是客户端代码失败并出现以下错误:
Traceback (most recent call last):
File "client_code.py", line 1, in <module>
from lib.foo import f
ImportError: No module named foo
我知道以下选项可行,但它们需要客户更改代码:
import os
if os.environ.get("USE_V2", "0") == "0": # Or some other runtime check
from .v1 import foo
else:
from .v2 import foo
这样的事情可能吗?
问题的更一般版本在这里:Support two versions of a python package without clients need to change code