从另一个路径重新加载python模块

问题描述 投票:0回答:1

我有同一软件包的两个版本,其结构如下:

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")
python pip installation reload
1个回答
0
投票

您应该能够通过将

__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__)
© www.soinside.com 2019 - 2024. All rights reserved.