LINUX.ORG.RU
решено ФорумAdmin

vim virtualenv load проблема

 , ,


1

2

Есть функция:

function! MySubLoadPyVenv(dir1)
    let s:old_path=expand('%:p:h')
    let activate_this = a:dir1 . '/bin/activate_this.py'
    if MyFindDir(a:dir1, 'dir')
        " load .env
        if getftype(a:dir1) == "dir" && filereadable(activate_this)

python << EOF
import vim
activate_this = vim.eval('l:activate_this')
execfile(activate_this, dict(__file__=activate_this))
EOF

            " set keywordprg=pydocX.Y
            let res=split(system('python --version'))[1][:-3]
            execute('set keywordprg='.'pydoc'.res)

            " return to old path
            execute 'cd' fnameescape(s:old_path)
        endif
    endif
endfunction

Вызываю: call MySubLoadPyVenv('env')

!python --version

Python 3.4.2

Press ENTER or type command to continue

Но! :python from distutils import sysconfig; print( sysconfig.get_python_lib( standard_lib = True ) )

/home/user/media/source_project/yaml_example/.env/lib/python2.7

Как это исправить ?

★★★★

Последнее исправление: bryak (всего исправлений: 1)

Не использовал vim с python3, но может надо использовать команду :python3? (Вроде, можно с обеими версиями собрать.)

xaizek ★★★★★
()

По версии вызываемого питона не подскажу, но в третьей для активации виртуального окружения надо делать так:

activate_this=os.path.expanduser(path)
with open(activate_this) as f:
    code = compile(f.read(), activate_this, 'exec')
    exec(code, dict(__file__=activate_this))

grazor ★★
()
Ответ на: комментарий от grazor

не помогает это. Устанавливается

/home/user/media/source_project/yaml_example/.env/lib/python2.7

интересный вопрос, что именно устанавливает 2.7. activate_this.py чтоли такой умный ?

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от grazor

дело в том, что если из шела сделать source .env/bin/activate, то всё ок, а если activate_this из вима - вот такая проблема

Если в activate_this закомментить этот кусок кода, то всё ок

import site
site.addsitedir(site_packages)
sys.real_prefix = sys.prefix
sys.prefix = base
# Move the added items to the front of the path:
new_sys_path = []
for item in list(sys.path):
    if item not in prev_sys_path:
        new_sys_path.append(item)
        sys.path.remove(item)
sys.path[:0] = new_sys_path

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)

например, собрать только с 3 версией:

-python
+python3
в генте сам знаешь как сделать. Это избавляет от кучи проблем, все нужные плагины работают с 3-й веткой.

Но нужно учитывать, что команд :py, :pydo и :python не будет, только :py3, :py3do и :python3 соотв.

slon
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.