Как я могу ограничить мою историю Python виртуальным окружением? - PullRequest
1 голос
/ 22 апреля 2019

Появляется Python 3 (по крайней мере по умолчанию), чтобы хранить историю интерактивных команд в глобальном местоположении, ~/.python_history. В результате команды, введенные в разных виртуальных окружениях, объединяются.

Есть ли способ отделить мою историю Python, чтобы каждая виртуальная среда имела (и имела доступ) свою собственную?

1 Ответ

0 голосов
/ 22 апреля 2019

Для реализации этого необходим файл PYTHONSTARTUP. У меня работает следующее:

def init():
    import os

    # readline/pyreadline

    try:
        import readline
        histfiles = ['~/.python_history']
        if 'VIRTUAL_ENV' in os.environ:
            histfiles.append('$VIRTUAL_ENV/.python_history')
        for histfile in histfiles:
            try:
                histfile = os.path.expandvars(histfile)
                histfile = os.path.expanduser(histfile)
                readline.read_history_file(histfile)
            except IOError:
                pass  # No such file

        def savehist():
            histsize = os.environ.get('HISTSIZE')
            if histsize:
                try:
                    histsize = int(histsize)
                except ValueError:
                    pass
                else:
                    readline.set_history_length(histsize)
            histfile = histfiles[-1]
            histfile = os.path.expandvars(histfile)
            histfile = os.path.expanduser(histfile)
            readline.write_history_file(histfile)

        import atexit
        atexit.register(savehist)

    except (ImportError, AttributeError):
        # no readline or atexit, or readline doesn't have
        # {read,write}_history_file - ignore the error
        pass

init()
del init

Адаптируйся под свои нужды. См. Мой полный init.py ( текстовая версия ; репозиторий git на https://git.phdru.name/dotfiles.git/, см. Файл lib/python/init.py).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...