Я понимаю, что IPython не поддерживает virtualenv и что наиболее логичным решением этого является установка ipython в каждом virtualenv отдельно, используя
pip install ipython
Все идет нормально. Я заметил одну вещь: если общесистемная копия IPython вызывается из virtualenv с использованием $> ipython
до того, как IPython будет установлен в этом virtualenv, последующие $> ipython
команды будут продолжать вызывать общесистемную копию ipython.
С другой стороны, если ipython не вызывается перед его установкой под virtualenv, $> ipython
появится новая установленная копия.
Какое этому объяснение?
Это также заставляет меня задуматься, означает ли такое поведение, что в будущем мне следует ожидать каких-то проблем?
python
virtualenv
ipython
Мо Сандер
источник
источник
ipython
исполняемого файла ( см. Этот вопрос ).hash -r
, которая удаляет кеш ранее запущенных команд, что обычно выполняется как часть активации env. Проверьтеhash -r
в ENV / bin / activate.hash -r
до активации env решает проблему. К вашему сведению, я работал с virtualenv 1.10.1Ответы:
alias ipy="python -c 'import IPython; IPython.terminal.ipapp.launch_new_instance()'"
Это отличный способ всегда быть уверенным, что экземпляр ipython всегда принадлежит версии python virtualenv.
Это работает только на ipython> 2.0.
Источник
источник
Ответ @SiddharthaRT хорош! Следуя этому подходу, мне проще:
Это будет использовать модуль IPython через bin python, гарантируя, что он ссылается на bin из виртуального env.
источник
Вы можете заставить IPython использовать виртуальную среду, если она доступна, добавив файл ниже в
~/.ipython/profile_default/startups
:import os import sys if 'VIRTUAL_ENV' in os.environ: py_version = sys.version_info[:2] # formatted as X.Y py_infix = os.path.join('lib', ('python%d.%d' % py_version)) virtual_site = os.path.join(os.environ.get('VIRTUAL_ENV'), py_infix, 'site-packages') dist_site = os.path.join('/usr', py_infix, 'dist-packages') # OPTIONAL: exclude debian-based system distributions sites sys.path = filter(lambda p: not p.startswith(dist_site), sys.path) # add virtualenv site sys.path.insert(0, virtual_site)
Я рекомендую назвать его,
00-virtualenv.py
чтобы изменения были внесены как можно раньше.Примечание: убедитесь, что ipython установлен в новой виртуальной среде, чтобы это работало.
источник
Как уже упоминалось, последние версии ipython осведомлены о virtualenv, поэтому вы можете использовать свой скрипт активации virtualenv bin для запуска ipython с использованием вашего virtualenv, например
$ source venv/bin/activate (venv) $ ipython WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
источник
ipython --version; cat /etc/issue
Активируйте свою виртуальную среду с помощью источника ~ / .virtualenvs / my_venv / bin / activate или запустив workon my_venv (в зависимости от того, как вы установили виртуальную среду my_venv)
Установить ipython
Если он все еще загружает системный ipython, запустите
источник
Если вы пытаетесь открыть ноутбук, даже ipython 5 не поможет - ipython проигнорирует virtualenv (по крайней мере, на моей машине / установке). Вам нужно будет использовать сценарий rgtk, но не забудьте изменить необязательную часть фильтра и sys.path.insert, как показано ниже:
import os import sys if 'VIRTUAL_ENV' in os.environ: py_version = sys.version_info[:2] # formatted as X.Y py_infix = os.path.join('lib', ('python%d.%d' % py_version)) virtual_site = os.path.join(os.environ.get('VIRTUAL_ENV'), py_infix, 'site-packages') dist_site = os.path.join('/usr', py_infix, 'dist-packages') # OPTIONAL: exclude debian-based system distributions sites # ADD1: sys.path must be a list sys.path = list(filter(lambda p: not p.startswith(dist_site), sys.path)) # add virtualenv site # ADD2: insert(0 is wrong and breaks conformance of sys.path sys.path.insert(1, virtual_site)
источник
(Debian / Ubuntu) при условии, что установлена некоторая версия (x) Python3, тогда:
$ sudo apt-get install -y ipython $ virtualenv --python=python3.x .venv $ source .venv/bin/activate $ pip3 install ipython $ ipython3
запустит ipython с вашей версией Python3.
источник
Я буду звонить через несколько лет в надежде, что кто-то сочтет это полезным.
Это решение решает несколько проблем:
3.6 != 3.7
).pyenv
где может быть ваша глобальная версия3.7
Python, и3.6
поэтому ваш локальный виртуальный Python использует глобальную версиюipython
не удастся.python
).Бросьте это в вашем
~/.bashrc
или~/.zshrc
или что там у вас:# This is a roundabout way to start ipython from inside a virtualenv without it being installed # in that virtualenv. The only caveot is that the "global" python must have ipython installed. # What this function does that's different than simply calling the global ipython is it ensures to # call the ipython that is installed for the same major.minor python version as in the virtualenv. # This is most useful if you use pyenv for example as global python3 could be 3.7 and local # virtualenv python3 is 3.6. function ipy { local PY_BIN local IPYTHON local PYV # This quick way will work if ipython is in the virtualenv PY_BIN="$(python -c 'import sys; print(sys.executable)')" IPYTHON="$(dirname "$PY_BIN")/ipython" if [[ -x "$IPYTHON" ]]; then "$IPYTHON" else # Ask the current python what version it is PYV="$(python -c 'import sys; print(".".join(str(i) for i in sys.version_info[:2]))')" echo "Looking for iPython for Python $PYV" # In a new shell (where pyenv should load if equipped) try to find that version PY_BIN="$($SHELL -i -c "python$PYV -c 'import sys; print(sys.executable)'")" "$(dirname "$PY_BIN")/ipython" fi }
Затем
source
или откройте новый терминал и запуститеipy
.источник