我创建了一个python3
虚拟环境(明确避免符号链接,使用--copies
):
» python3 -m venv --without-pip --copies venv
这是我现在完整的虚拟环境:
» tree venv/
venv/
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── python
│ └── python3
├── include
├── lib
│ └── python3.4
│ └── site-packages
├── lib64 -> lib
└── pyvenv.cfg
我禁用PYTHONPATH
, 以确保没有任何东西从外部泄漏:
» PYTHONPATH=""
激活venv:
» source venv/bin/activate
验证activate
没有污染我的PYTHONPATH
:
» echo $PYTHONPATH
(空白,正如预期的那样)
我正在使用正确的python:
» which python
/foo/bar/venv/bin/python
但系统模块仍在被访问:
» python
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import unittest
>>> print(unittest)
<module 'unittest' from '/usr/lib/python3.4/unittest/__init__.py'>
>>>
我预计该import unittest
语句会失败,因为虚拟环境没有这样的模块。
我想知道:
- 为什么在 virtualenv 中访问系统包?
- 如何创建一个完全独立的虚拟环境?