Я создаю виртуальную среду 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=""
Активируйте венв:
» source venv/bin/activate
Убедитесь, что activate
не загрязнил мой PYTHONPATH
:
» echo $PYTHONPATH
(пусто, как и ожидалось)
Я использую правильный питон:
» 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
завершится ошибкой, поскольку в виртуальной среде такого модуля нет.
Я бы хотел знать:
- Почему доступ к системным пакетам осуществляется в виртуальном окружении?
- Как я могу создать полностью автономную виртуальную среду?