在来宾 VM 上使用主机中创建的 Python virtualenvs

Using Python virtualenvs created in host machine on a guest VM

我的主机上有一个包含 virtualenv 的目录。该目录与虚拟机共享,我必须在虚拟机上 运行 一些 Python 脚本(包含在同一目录中)。

当我在主机上的 virtualenv 中 运行 Python 脚本时,脚本 see/use venv 包没有问题。但是,当我尝试 运行 激活相同 venv 的虚拟机中的某些内容时,Python 看不到这些包。

一种解决方法是在来宾计算机中创建一个新的 virtualenv 并使用主机的 requirements.txt 来填充程序包。另一个 "however": 我无法在客户机上安装 virtualenv。我 运行 pip install virtualenv,它等了将近一分钟,然后我得到以下信息:

Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement virtualenv
Cleaning up...
No distributions at all found for virtualenv
Storing debug log for failure in /home/mininet/.pip/pip.log

日志中的重要位是:

usr/bin/pip run on Thu Jul 23 03:29:31 2015
Downloading/unpacking virtualenv
  Getting page https://pypi.python.org/simple/virtualenv/
  Could not fetch URL https://pypi.python.org/simple/virtualenv/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/virtualenv/ (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)

FWIW 我正在使用 VirtualBox 和 Mininet VM (Ubuntu)。虚拟机可以上网。

那么,我的主要问题是 为什么我不能在来宾计算机中使用主机 venv 的包 即使使用相同的共享 venv?

两个次要问题是为什么我不能在来宾机器上安装virtualenv,如果来宾没有安装virtualenv,我如何激活来宾机器中的共享venv?

virtualenv 中的文件包含在主机系统上有效但可能在来宾系统上无效的绝对文件路径。您可以通过使 virtualenv 可重定位(运行 在主机系统上这样做)来解决这个问题:

virtualenv --relocatable ENV

documentation 中的更多信息(和注意事项)。

此外,您没有提及主机 OS 是什么 - 正如文档所指出的那样,只有 OS 相同时才能共享 virtualenv,因为诸如库之类的东西位置和二进制格式。

(我不知道为什么你不能在来宾上创建 virtualenv - 你能在那里 wget https://pypi.python.org/simple/virtualenv/ 吗?)