Вы можете сделать то, что вы просите, установив обе версии в разные места (чтобы они не перезаписывали друг друга), а затем переименовать пакет, так как это, кажется, ваш единственный вариант.
Возьмите В следующем примере я собираюсь настроить 2 виртуальные среды, в первой я установлю scitkit-learn 0.22.2, а во второй я установлю 0.20.4, затем переместу имя пакета, чтобы python могла различать и напечатайте версию ($ обозначает что-то для ввода в командной строке):
$ python3 -m venv sk1
$ source sk1/bin/activate
$ pip3 install scikit-learn==0.22.2 # install to venv 1
$ deactivate # leave
$ python3 -m venv sk2
$ source sk2/bin/activate
$ pip3 install scikit-learn==0.20.4 # install to venv 2
$ deactivate
# move the package names
$ mv ./sk1/lib/python3.7/site-packages/sklearn ./sk1/lib/python3.7/site-packages/sklearn0222
$ mv ./sk2/lib/python3.7/site-packages/sklearn ./sk2/libpython3.7/site-packages/sklearn0204
# add both of them to your PYTHONPATH
$ export PYTHONPATH=$PYTHONPATH:$(pwd)/sk1/lib/python3.7/site-packages/sklearn0222
$ export PYTHONPATH=$PYTHONPATH:$(pwd)/sk2/lib/python3.7/site-packages/sklearn0204
Теперь давайте go в интерпретатор python, импортируем их:
$ python3
>>> import sklearn0222 as sk0222
>>> import sklearn0204 as sk0204
>>> sk0222.__version__
'0.22.2'
>>> sk0204.__version__
'0.20.4'
При этом для запуска будет использоваться код, указанный в версии пакетов c, но при обращении к каждому из них необходимо быть СУПЕР ОСТОРОЖНЫ, и вы не можете использовать оба пакета в одном модуле. поэтому в mymodule1.py вы можете импортировать sklearn0222 и использовать его подмодули, а в mymodule2.py вы можете импортировать sklearn0204 и использовать его подмодули, но если вы попытаетесь использовать оба в одном и том же модуле в вашей программе, второй не будет распознан.
Опять же, это плохая идея, но это способ получить то, что вы ищете.