我有同一软件包的两个版本,其结构如下:
pkgs
├── v1
│ ├── pkg
│ │ ├── main.py
│ │ └── utils.py
│ └── setup.py
└── v2
├── pkg
│ ├── main.py
│ └── utils.py
└── setup.py
我想首先使用 v1
main.py
中的函数,然后使用 v2 main.py
中的相同函数。
我无法通过路径导入 pkg
,因为它使用 utils.py
从 import pkg.utils
导入另一个函数,因此必须安装 pkg
。
我尝试使用 pip 重新安装软件包并重新加载:
import pkg
subprocess.check_call([sys.executable, "-m", "pip", "install", "--quiet", "pkgs/v2"])
pkg = reload(pkg)
这不起作用,python 重新加载 v1 版本。
有办法让这个工作吗?
编辑: 代码示例:
subprocess.check_call([sys.executable, "-m", "pip", "uninstall", "--quiet", "-y", module_name])
subprocess.check_call([sys.executable, "-m", "pip", "install", "--quiet", "-e", pkg_dir])
importlib.invalidate_caches()
module = importlib.import_module(module_name)
pkgfunc = getattr(module, "func")
您应该能够通过将
__init__.py
文件放入您的 v1
和 v2
目录中,添加然后将 pkgs
目录添加到您的 sys.path
来完成这项工作。
sys.path.insert(0, "/path/to/pkgs")
import v1.pkg as v1_pkg
import v2.pkg as v2_pkg
print(v1_pkg.__path__)
print(v2_pkg.__path__)