为什么 virtualenv 拉取后依赖全局 python 而不是本地?

Why virtualenv relies on the global python instead of the local one, after being pulled?

我提取了 (git) 一个 python 项目,该项目是我在另一台计算机上使用 virtualenv 创建的。因此,python 库实际上位于该项目的本地目录中(例如,fila_env/bin/python)。拉动它后,我可以找到它(见下面的树)。但是,当我激活环境(使用 source fila_env/bin/activate)时,正在使用这台机器上的 python 而不是 virtualenv 的:

(fila_env) username@ASCSC-645A:~/CODES/.../myProject$ which python
>>> /usr/bin/python

我用谷歌搜索,但找不到好的解决方案。我想知道:

  1. 我怎么能保证如果有人拉这个项目,他们只会 使用提供的 python 库,而不是他们自己的 python.
  2. 这是创建 virtualenv 并将整个项目(包括 virtualenv)推送到云端的正确方法吗?

以下是更多信息:

├── yyyyyyExample.py
├── fila_env
│   ├── bin
│   │   ├── activate
│   │   ├── ...
│   │   ├── python
│   │   ├── python2 -> python
│   │   ├── python2.7 -> python
│   │   ├── python-config
│   │   ├── ...
│   │   └── wheel
│   ├── include
│   │   └── python2.7 -> /usr/include/python2.7
│   ├── lib
│   │   └── python2.7
│   ├── local
│   │   ├── bin -> .../fila_env/bin
│   │   ├── include -> .../fila_env/include
│   │   └── lib -> .../fila_env/lib
│   ├── pip-selfcheck.json
│   └── share
│       ├── jupyter
│       └── man
└── xxxxxxExample.py
  1. 你不能也不应该,如果我使用 32 位 Linux 并且你的 virtualenv 是在 64 位 Windows 上创建的(反之亦然) python 二进制肯定不适合我。

  2. 同样,不。 virtualenv 是开发人员的工具,而不是分发工具。对于分发,您应该考虑 sdist/egg/wheel, or creating platform-dependent binaries with PyInstaller, py2exe 或类似的工具。