Как мне заставить virtualenvwrapper и cygwin сотрудничать? - PullRequest
9 голосов
/ 01 февраля 2010

Я пытаюсь заставить virtualenv[wrapper] работать на моей машине с Windows через Cygwin. Установка прошла успешно вместе с easy_install на основании следующих указаний: http://www.doughellmann.com/docs/virtualenvwrapper/.

Проблема возникает, когда я использую mkvirtualenv [name_of_vir_env]. Я получаю следующий вывод:

$ mkvirtualenv testenv
New python executable in testenv\Scripts\python.exe
Installing setuptools.................done.
bash: D:\.virtualenvs/testenv/bin/postactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/postactivate': No such file or directory
bash: D:\.virtualenvs/testenv/bin/predeactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/predeactivate': No such file or directory
bash: D:\.virtualenvs/testenv/bin/postdeactivate: No such file or directory
chmod: getting attributes of `D:\\.virtualenvs/testenv/bin/postdeactivate': No such file or directory
ERROR: Environment 'D:\.virtualenvs/testenv' does not contain an activate script.

Внутри каталога testenv нет подкаталога bin, а только Lib и Scripts. Scripts содержит activate.bat, который должен использоваться для активации этой конкретной среды, однако, если я пытаюсь выполнить это через bash, я получаю ошибку:

$ ./activate.bat
./activate.bat: line 1: @echo: command not found
./activate.bat: line 4: syntax error near unexpected token `('
./activate.bat: line 4: `if not defined PROMPT ('

Я могу выйти bash и позвонить activate.bat, и это изменит ваше окружение. Но тогда, не входя в bash, я не могу использовать команду workon или любую другую из virtualenvwrapper_bashrc.

Как заставить их работать вместе, то есть оставаться в bash, чтобы я мог использовать команды в virtualenvwrapper_bashrc?

Ответы [ 4 ]

3 голосов
/ 29 января 2011

У меня нет опыта работы с virtualenvwrapper, но я регулярно использую virtualenv.Я не думаю, что activ.bat предназначен для запуска под Cygwin, он работает при запуске в обычной оболочке Windows.Я думаю, что если вы используете cygwin, вы можете использовать что-то более похожее на bin / activ (версия для unix-подобных ОС).

Среда cygwin в bash может существенно отличаться от стандартной активации среды.bat ожидает запуска, поэтому поиск сценария активации, который будет работать с bash (возможно, найти копию из версии для Unix), вероятно, приведет вас туда, где вы можете запустить свой virtualenv в bash.

1 голос
/ 15 сентября 2012

Это сделало это для меня:

https://bitbucket.org/cliffxuan/virtualenvwrapper-for-cygwin-windows-python

Ваниль virtualenvwrapper не поддерживает среду Cygwin.

Однако предостережение заключается в том, что исполняемые сценарии в каталоге Scripts в virtualenv могут выполняться только в том случае, если вы явно передаете их команде python и не используете ~ или что-либо еще, что Cygwin неявно преобразует в путь начиная с /cygdriv/c/... - родной Windows Python не может видеть эти пути.

1 голос
/ 01 декабря 2010

Этот пост выглядит многообещающе http://atbrox.com/2009/09/21/how-to-get-pipvirtualenvfabric-working-on-cygwin/

- Квентин

0 голосов
/ 16 декабря 2010

Я не знаю virtualenv, но я вижу то, что похоже на классическую проблему синтаксиса смешанного пути от cygwin:

Ваша строка:

D:\.virtualenvs/testenv/bin/predeactivate

но Cygwin интерпретирует обратную косую черту как побег для "." персонаж, продюсер:

D:.virtualenvs/testenv/bin/postactivate

, который находится в тексте ошибки, который вы цитируете, и, очевидно, является неправильным путем. Проверьте фактическую переменную среды - она, вероятно, в синтаксисе пути DOS / Windows, а внутренняя часть в синтаксисе cygwin / unix.

Если это так, попробуйте использовать os.path.join, чтобы объединить две части и посмотреть, получите ли вы согласованный синтаксис из этого.

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