Я установил последнюю стабильную версию 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
.
Почему я получаю предупреждение?
Попробуйте распечатать их изнутри 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 из внешней установки.
Я предполагаю, что это то, что вы сделали:
ipython
и увидели это предупреждениеВот актуальная информация и почему hash -r
это исправили:
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, поэтому оно никогда не запускалось!
Потом найду!
Спасибо!
Самый полезный комментарий
Возможно, исправление так же просто, как
hash -r
, вы можете попробовать это?