Как я могу использовать pywin32 с virtualenv без включения папки site-packages среды хоста? - PullRequest
51 голосов
/ 02 декабря 2009

Я работаю с PyInstaller в Python 2.6, который поддерживается только частично из-за беспорядка, созданного MS с их явным бессмысленным, который теперь влияет на Python, поскольку теперь он компилируется в MSVC8.

Проблема заключается в том, что поддержка встраивания манифеста опирается на расширения pywin32 , что создает боль, поскольку без включения папки site-packages хоста при создании virtualenv (что-то вроде победы над точкой в ​​среде сборки) Я не могу найти способ установить необходимые расширения, чтобы они были доступны для PyInstaller.

Кто-нибудь нашел решение этой проблемы?

Ответы [ 5 ]

74 голосов
/ 23 марта 2010

Я нашел http://old.nabble.com/Windows:-virtualenv-and-pywin32--td27658201.html (теперь неработающая ссылка), которая предложила следующее решение:

  1. Просмотр http://sourceforge.net/projects/pywin32/files/ для URL exe вы хотите
  2. Активируйте свой virtualenv
  3. Выполнить easy_install http://PATH.TO/EXE/DOWNLOAD

Это работает с современными версиями setuptools (около февраля 2014 г., сообщается tovmeod в комментариях).


Если вы используете старую версию setuptools (или распространяете ее обратно в setuptools), вы можете получить это сообщение об ошибке:

ошибка: c: \ users \ blah \ appdata \ local \ temp \ easy_install-ibkzv7 \ pywin32-214.win32-py2.6.exe не является действительным distutils Windows .exe

В этом случае:

  1. Скачайте exe самостоятельно
  2. Активируйте свой virtualenv
  3. Выполнить easy_install DOWNLOADED_FILE.exe

Надеюсь, я попробовал "pip install", а не "easy_install", но это не сработало и, скорее всего, никогда не будет (необходима цитата).


Наконец, я нашел, но не тестировал решение по адресу http://www.mail-archive.com/python-list@python.org/msg272040.html, которое:

Решил это, скопировав файл pywin32.pth в мои пакеты сайта virtualenv и редактируем файл так, чтобы он указывал на путь.

Если другие варианты у вас не работают, может, так и будет?

13 голосов
/ 30 июня 2016

Для Python 2.7 или 3.x используйте pypiwin32 .

pip install pypiwin32

4 голосов
/ 02 декабря 2009

Хорошо, ну, так как мне пришлось искать путь вперед, я импровизировал. Я внутренне создал репозиторий git со взломанной версией pywin32, которая будет установлена ​​в virtualenv с использованием стандартного сценария setup.py. Потребовалось много усилий, чтобы заставить его работать правильно, но мне удалось заставить его загружаться, и теперь зависимый код работает так, как мне нужно. Если люди считают, что это будет полезно для сообщества, пожалуйста, оставьте комментарий: если я получу достаточно, я попытаюсь что-то добавить в мой аккаунт на github.

0 голосов
/ 03 декабря 2015

Редактировать: Поцарапайте это, кажется, некоторые проблемы с установкой все еще ...

Я довольно устал от всей ситуации и только что создал набор преобразованных колес ("wheel convert <.exe>"). Я постараюсь сохранить их для самой последней сборки, но, если есть какие-то проблемы, выкрикиваем.

https://tr00st.co.uk/python/wheel/pywin32/

Установка может быть легко выполнена с использованием pip и указанием на пакет, соответствующий вашей версии и архитектуре. Например, для Python 3.5 / amd64:

pip install https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl

Предупреждение: в настоящее время процесс --upgrade завершается неудачно, поскольку процедура удаления не может выполнить очистку после себя (доступ запрещен при очистке win32api.pyd) - это происходит только при удалении временного каталога, который может быть удаляется вручную. Самый простой способ - удалить и переустановить вместо обновления, а затем вручную удалить временную папку.

0 голосов
/ 18 ноября 2015

Это могло быть улучшено с предыдущего ответа, так как я успешно установил pywin32 в песочнице на нескольких машинах без каких-либо особых "хаков":

$ virtualenv sandbox
$ sandbox\scripts\activate
(sandbox) $ git clone https://github.com/Travis-Sun/pywin32.git
(sandbox) $ cd pywin32
(sandbox) $ python setup.py install

Протестировано в следующих условиях:

...