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

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

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

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


person jkp    schedule 02.12.2009    source источник


Ответы (5)


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

  1. Найдите http://sourceforge.net/projects/pywin32/files/ URL-адрес exe вы хотите
  2. Активируйте свою виртуальную среду
  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. Активируйте свою виртуальную среду
  3. Беги easy_install DOWNLOADED_FILE.exe

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


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

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

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

person lofidevops    schedule 23.03.2010
comment
в частности, загрузите установщик pywin32 .exe, затем выполните easy_install -Z в файле .exe. -Z может и не нужно, но я всегда так делаю. - person Kevin Horn; 05.05.2011
comment
@KevinHorn: Нет, ты прав, -Z не нужен, я только что попробовал. Спасибо! - person Scott Stafford; 21.04.2012
comment
используется easy_install garr.dl.sourceforge.net/project/pywin32/pywin32/Build%20218/ и отлично работал внутри virtualenv - person tovmeod; 13.02.2014
comment
@tovmeod это хороший момент, теперь, когда Distribute и setuptools объединились, это должно быть волшебно :) Я обновлю ответ - person lofidevops; 14.02.2014
comment
Я понимаю, что это более старый пост, и я редко, если когда-либо, публикую на SO .... Но я просто должен сказать спасибо @d3vid. У меня есть установка x64 Win10, и я не смог установить pywin32 из-за глупая ошибка реестра. Спасибо Спасибо спасибо. - person Aaron Henderson; 04.03.2016
comment
Я попробовал метод easy_install DOWNLOADED_FILE.exe (потому что sourceforge — кошмар) и получил PermissionError: [WinError 5] Access is denied: 'C:\\Users\\User\\AppData\\Local\\Temp\\easy_install-9txh0ypu\\pywin32-220-py3.5-win-amd64.egg.tmp\\mfc140u.dll', что привело к другим ошибкам. Тем не менее, теперь я могу import win32service и подтвердил, что моя служба устанавливается, запускается и т. д. Так что... я думаю, это нормально для курса [Windows]. - person Bruno Bronosky; 20.11.2016

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

pip install pypiwin32

person Andrei Damian-Fekete    schedule 30.06.2016
comment
Похоже, это сработало, так как я избавился от ошибки Could not find a version that satisfies the requirement pywin32 (from versions: ), которую вы получаете с помощью простого pip install pywin32. Но теперь я получаю ImportError: DLL load failed: The specified module could not be found., хотя вижу win32 в своем sys.path. Есть идеи? - person Bruno Bronosky; 20.11.2016
comment
это своего рода поздний ответ, но почему бы и нет. pywin32 очень чувствителен к вашей версии Python. с pip он должен хорошо идентифицировать вашу версию Python, но, по-видимому, это не так. Вот почему вы получаете ошибку DLL, потому что установленный pywin32 не соответствует вашей версии python. так что мне помогло установить его из файла whl, который я нашел в lfd.uci .edu/~gohlke/pythonlibs (неофициальный сайт) - person Kostas Markakis; 15.07.2021

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

person jkp    schedule 02.12.2009
comment
Я бы хотел взглянуть на этот репозиторий - person airstrike; 09.07.2013
comment
Можете ли вы хотя бы перечислить файлы, которые вы включили в репо? - person Korijn; 12.06.2014
comment
Это ужасный ответ против сообщества, и с репутацией 33k+ вам лучше знать. Принятый ответ исходит от OP, который говорит: «Неважно, все люди, которые помогли и пришли сюда через Google, я это исправил, но слишком занят, чтобы показать вам, как это сделать». Я не ненавижу, потому что я был там. Я просто должен высказать это, потому что надеюсь, что у кого-нибудь хватит приличия позвать меня. - person Bruno Bronosky; 20.11.2016

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

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

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

person cthepenier    schedule 18.11.2015

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

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

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

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

установить pip https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl

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

person tr00st    schedule 03.12.2015