如何在 Python 的一个程序中 import/use 两个不同版本的库 (pytorch)?

How can I import/use two different versions of a library (pytorch) in one program in Python?

我需要在同一 python 网络服务器的不同部分使用两个不同版本的 pytorch。不幸的是,我无法将它们都安装在我正在使用的同一个 conda 环境中。我试过从路径本身导入其中之一:

MODULE_PATH = "/home/abc/anaconda3/envs/env/lib/python3.7/site-packages/torch/__init__.py"
MODULE_NAME = "torch"
import importlib
import sys
spec = importlib.util.spec_from_file_location(MODULE_NAME, MODULE_PATH)
module = importlib.util.module_from_spec(spec)
sys.modules[spec.name] = module
spec.loader.exec_module(module)

这对于导入与活动环境中的版本不同的版本来说效果很好,但是当我尝试导入第二个版本时 运行 遇到了错误(我试过 'import torch'也同上):

File "/home/abc/anaconda3/envs/env2/lib/python3.7/site-packages/torch/__init__.py", line 82, in <module>
    __all__ += [name for name in dir(_C)
NameError: name '_C' is not defined

关于如何使用这两个版本的任何想法?谢谢!

原则上不能导入两个同名的库。当然,您可能会做一些 import-sorcery 并设法做到。但请记住 pytorch 不是一个简单的 Python 包。

现在,即使您设法解决了这个问题,但您需要为自己的服务提供两个不同的版本,这对我来说似乎非常奇怪。长此以往运行,遇到那种情况只会让你很头疼。我的建议是重新考虑您的做法。

在不了解您的情况的情况下,我建议将网络服务一分为二。这将允许您拥有两个环境和两个版本的 pytorch 您需要。