Ipython: IPython установлен в virtualenv. ПРЕДУПРЕЖДЕНИЕ «Пожалуйста, установите IPython внутри virtualtenv»

Созданный на 14 мар. 2013  ·  14Комментарии  ·  Источник: ipython/ipython

Я установил последнюю стабильную версию IPython в виртуальную среду, созданную с последней стабильной версией virtualenv на последней версии Python 2.7, и все еще получаю предупреждение о том, что я должен установить IPython внутри виртуальной среды.

Если есть сомнения, я создал virtualenv и активировал его с помощью source [virtenv]/bin/activate , а затем установил ipython с помощью pip install ipython . Чтобы убедиться, что я использую правильный ipython, я сделал which ipython , он правильно указывает на двоичный файл ipython в виртуальной среде. Тем не менее, когда я вызываю ipython , я получаю WARNING message :

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv .

Почему я получаю предупреждение?

needs-info

Самый полезный комментарий

Возможно, исправление так же просто, как hash -r , вы можете попробовать это?

Все 14 Комментарий

Попробуйте распечатать их изнутри IPython:

import os, sys, IPython
print os.environ['VIRTUAL_ENV']
print sys.executable
print IPython.__file__
print sys.path

Спасибо @minrk. Ниже приведены результаты:

Прежде чем я вызову IPython из командной строки, мое приглашение правильно отображается как:
([name of virtual env]) [my regular prompt]

Затем, когда я нахожусь в IPython:

print os.environ['VIRTUAL_ENV']
# correctly prints the path to the environment 

print sys.executable
# Prints the external path to Python (?)

print IPython.__file__
# Prints the external path to the ipython installation's __init__.pyc (?)

print sys.path
# Prints the path to the site-packages folder from the virtualenv at the top.
# Then the bin path of the Python's external installation (?)
# Then some paths to individual packages from the external installation (?)
# Then the paths to individual packages from the virtualenv (and it misses the virtualenv's installation of IPython, ?)
# Then a few more paths to individual packages of the external installation (?)
# Finally the IPython from the external installation (?)

Если я выйду из сеанса IPython, мое приглашение будет отображаться правильно:
([name of virtual env]) [my regular prompt]

Чтобы уточнить, когда я говорю внешняя установка _, я имею в виду установку _не * внутри virtualenv и не часть системной установки, а ту, которую я включил вверху $PATH и $LD_LIBRARY_PATH и то, что я знаю, работает правильно.

Возможно, у меня отсутствует какая-то переменная среды, которая сбивает с толку IPython, полагая, что я использую системную установку, а не внешнюю установку, которую я хочу использовать в сочетании с моим virtualenv и которую я включаю в начале PATH и LD_LIBRARY_PATH ?

что вы получаете с head $(which ipython) ?

еще один: sys.argv

Если sys.executable неверен, значит, все пошло не так еще до того, как были загружены какие-либо пакеты Python. Это именно то, что произошло бы, если бы в env была установлена ​​система ipython вместо одной (например, если бы вы сделали /usr/bin/ipython с активной env, что, как мы все должны ожидать, будет плохо себя вести).

Возможно, исправление так же просто, как hash -r , вы можете попробовать это?

Спасибо @minrk. head $(which ipython) возвращает:

#!/path_to_my_virtual_env/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.13.1','console_scripts','ipython'
__requires__ = 'ipython==0.13.1'
import sys
from pkg_resources import load_entry_point

sys.exit(
   load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
)

А print sys.argv возвращает путь к внешней установке Python.

Запуск hash -r из терминала, похоже, сработал!

Теперь я получаю другое предупреждение, хотя
WARNING: IPython History requires SQLite, your history will not be saved

что интересно, так как я не получаю это сообщение, если деактивирую свой virtualenv и запускаю ipython из внешней установки.

Я предполагаю, что это то, что вы сделали:

  1. вы запустили ipython и увидели это предупреждение
  2. вы установили ipython в env
  3. в том же сеансе оболочки вы попытались снова запустить ipython

Вот актуальная информация и почему hash -r это исправили:

  • Путь к командам кэшируется после того, как вы их вызвали, поэтому на самом деле он не ищет вашу PATH для данной команды более одного раза в сеансе оболочки.
  • which не знает об этом кеше, поэтому which ipython не обязательно указывает на ipython , который будет вызываться, если он был вызван ранее в сеансе оболочки.
  • hash -r просто сбрасывает этот кеш, так что which снова будет точным.

Что касается sqlite, какой Python вы использовали для virtualenv?

@minrk Да, это правильно! Спасибо. Я использую Python 2.7 x64.

Вы сами собирали Python? Если это так, вам нужно убедиться, что libsqlite присутствует и доступен при компиляции Python.

Спасибо @minrk. libsqlite , кажется, доступен для внешнего IPython, т.е. тот, который я запускаю, когда не активирую виртуальную среду (хотя это не тот, который был установлен в системе, так как я изменил PATH и LD_LIBRARY_PATH , чтобы включить внешнюю установку вверху). Тем не менее, я предполагаю, что внешний IPython может использовать libsqlite из установки системы (возможно, из других путей в LD_LIBRARY_PATH ). Возможно ли это?

В любом случае, еще раз спасибо за вашу помощь. Первоначальная проблема, о которой я сообщил, решена, поэтому мы можем безопасно закрыть тикет.

обычно это проблема времени компиляции - я думаю, вам нужны заголовки и т. д. (вы не можете исправить это без перекомпиляции Python)

Я установил исполнительное программное обеспечение профиля .py на Notebook, поэтому оно никогда не запускалось!
Потом найду!
Спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги