Нет постоянной истории команд в Python 3.5 (virtualenv)

Я недавно установил новый virtualenv для Python 3.5 в Ubuntu 16.04, и всякий раз, когда я ввожу оболочку python в терминал (набирая «python3»), у меня нет постоянной истории команд, которые я вводил в терминал ранее.

В обычной системе python3 постоянная история команд работает нормально и не требует специальной настройки. Как я могу включить его для virtualenv?

Ваш virtualenv нет использует систему python3? Вы установили отдельную версию Python? Если да, то как вы это сделали? Похоже, вам не хватает readline; лучший способ исправить это, в первую очередь, зависит от того, как вы все настраиваете.

user2357112 supports Monica 01.05.2018 23:37

Если я активирую virtualenv и наберу «which python3», он покажет мне $ virtualenvpath / bin / python3. Однако я не устанавливал отдельную версию Python. Чтобы настроить virtualenv, я набрал «virtualenv --system-site-packages -p python3 $ virtualenvpath» (из инструкций по установке Tensorflow: tenorflow.org/install/install_linux#InstallingVirtualenv) Кроме того, все остальное в virtualenv работает нормально. Я также убедился, что readline установлен в virtualenv.

Jason 02.05.2018 03:02

Странный. Что произойдет, если вы запустите import readline в своем виртуальном окружении? А как насчет import site; это на что-нибудь влияет?

user2357112 supports Monica 02.05.2018 03:06

Ни импорт не вызывает ошибку, ни на что не влияет

Jason 02.05.2018 03:11

Похоже, либо вы на самом деле не используете Python 3, либо что-то мешает нормальной работе модуля site. Есть несколько параметров командной строки, которые могут вызвать это, или это может быть какая-то часть тензорного потока, о котором я не знаю, или файл с именем site.py или пакет с именем site могут мешать чему-то.

user2357112 supports Monica 02.05.2018 03:16

Я определенно в python3. Как я уже сказал, все остальное работает отлично, я просто не могу вспомнить команды из предыдущих оболочек python3. Чтобы уточнить, у меня есть история команд в оболочке, но она очищается, когда я завершаю оболочку.

Jason 02.05.2018 04:14

Кроме того, я могу импортировать модуль сайта и убедиться, что он правильный.

Jason 02.05.2018 04:15

«Чтобы уточнить, у меня есть история команд в оболочке» - это было бы полезно узнать раньше. Теперь, когда я это знаю, я могу видеть те части вашего сообщения, где вы пытались это сказать, но это было совсем неясно.

user2357112 supports Monica 02.05.2018 05:21

Очевидно, virtualenv использует собственный пользовательский site.py, который не очень хорошо синхронизировался с изменениями в "обычном" site.py. Похоже, это одна из несовместимостей. Возможно, вам придется настроить файл истории чтения строки самостоятельно.

user2357112 supports Monica 02.05.2018 05:33

Как вы сказали, я обнаружил, что мне нужно настроить его вручную. По иронии судьбы, я нашел ответ на вопрос, как это отключить (но я изменил длину истории, чтобы она была ненулевой): unix.stackexchange.com/a/121390 Я могу подтвердить, что это работает

Jason 02.05.2018 16:32

Однако было бы предпочтительнее найти общее решение - оно не масштабируется, поскольку я должен сказать всем пользователям virtualenv создать файл .pythonrc в их домашнем каталоге, который настраивает историю, а затем добавить «export PYTHONSTARTUP = ~ / .pythonrc "в их .bashrc или .profile.

Jason 02.05.2018 16:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
11
844
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ответ скрыт в комментариях и поэтому его трудно найти:

Из https://unix.stackexchange.com/a/121390 из комментария @ Jason:

Создайте файл .pythonrc.py:

import os
import atexit
import readline

readline_history_file = os.path.join(
    os.path.expanduser('~'),
    '.python_history'
)
try:
    readline.read_history_file(readline_history_file)
except IOError:
    pass

atexit.register(readline.write_history_file, readline_history_file)

и экспортируйте его, добавив в ~/.bashrc следующую строку:

export PYTHONSTARTUP=$HOME/.pythonrc.py

Другие вопросы по теме