Как я могу использовать pywin32 с virtualenv без необходимости включать папку сайта-узла хоста?

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

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

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

Ответ 1

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

Ответ 2

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

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


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

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

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

  • Загрузите exe самостоятельно
  • Активируйте свой virtualenv
  • Выполнить easy_install DOWNLOADED_FILE.exe

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


Наконец, я нашел, но не протестировал решение на http://www.mail-archive.com/[email protected]/msg272040.html, которое:

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

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

Ответ 3

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

pip install pypiwin32

Ответ 4

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

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

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

Ответ 5

Изменить: на этот раз поцарапать, по-прежнему возникают проблемы с установкой...

Я устал от всей ситуации и просто создал набор преобразованных колес ( "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 в настоящее время терпит неудачу, поскольку процедура удаления не может очистить после себя (Access Denied при очистке win32api.pyd) - это только при удалении временного каталога, который можно удалить вручную. Самый простой способ - удалить и переустановить вместо обновления, а затем вручную удалить временную папку.