Как установить pywin32 в virtualenv с python 2.7 64 бит?

интересно, Как правильно установить на virtualenv с 64-битным модулем python 2.7 pywin32 (операционная система - Windows 7 64 бит).
Я нашел установщик exe на Sourceforge.

когда я запускаю easy_installer в командной строке, сначала все идет хорошо, но вскоре я вижу странное поведение: в то время как pywin32-216.победа-для amd64-py2.7 устанавливает он работает pywin32-216-py2.7-с Win32.яйцо и оно терпит неудачу с ошибкой:

No local packages or download links found for pywin32==216
Best match: None

и вот мой полный log:

(sandbox_virtenv) D:testpy2exe_test>easy_install http://sourceforge.net/projects/pywin32/files/pywin32/Build216/pywin32-216.win-amd64-py2.7.exe
Downloading http://sourceforge.net/projects/pywin32/files/pywin32/Build216/pywin32-216.win-amd64-py2.7.exe
Processing pywin32-216.win-amd64-py2.7.exe
pywintypes: module references __file__
win32evtlogutil: module references __file__
win32serviceutil: module references __file__
win32timezone: module references __file__
Demos.win32rcparser_demo: module references __file__
Demos.security.sspi.validate_password: module references __file__
isapi.install: module references __file__
isapi.samples.advanced: module references __file__
isapi.samples.test: module references __file__
isapi.test.setup: module references __file__
pywin.framework.scriptutils: module references __file__
pywin.framework.startup: module references __path__
pywin.scintilla.config: module references __path__
pywin.scintilla.control: module references __file__
pywin.scintilla.IDLEenvironment: module references __file__
scripts.regsetup: module references __file__
scripts.setup_d: module references __file__
test.testall: module references __file__
test.test_clipboard: module references __file__
test.test_win32api: module references __file__
test.test_win32rcparser: module references __file__
D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandbdist_egg.py:422: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  symbols = dict.fromkeys(iter_symbols(code))
test.test_win32trace: module references __file__
win32com.__init__: module references __path__
win32com.server.register: module references __file__
win32com.server.register: module references __path__
win32com.test.GenTestScripts: module references __path__
win32com.test.pippo_server: module references __file__
win32com.test.testall: module references __file__
win32com.test.testAXScript: module references __path__
win32com.test.testDictionary: module references __file__
win32com.test.testPippo: module references __file__
win32com.test.testPyComTest: module references __file__
win32com.test.testServers: module references __file__
win32com.test.util: module references __file__
win32comext.adsi.__init__: module references __path__
win32comext.authorization.__init__: module references __path__
win32comext.axcontrol.__init__: module references __path__
win32comext.axdebug.codecontainer: module references __file__
win32comext.axdebug.debugger: module references __file__
win32comext.axdebug.__init__: module references __path__
win32comext.axscript.__init__: module references __path__
win32comext.bits.__init__: module references __path__
win32comext.directsound.__init__: module references __path__
win32comext.directsound.test.ds_test: module references __file__
win32comext.internet.__init__: module references __path__
win32comext.mapi.__init__: module references __path__
win32comext.shell.__init__: module references __path__
win32comext.shell.demos.servers.empty_volume_cache: module references __file__
win32comext.shell.demos.servers.folder_view: module references __file__
win32comext.taskscheduler.__init__: module references __path__
creating 'c:usersantp~1.kyiappdatalocaltempeasy_install-kclmxkpywin32-216-py2.7-win32.egg' and adding 'c:usersantp~1.kyiappdatalocaltempeasy_install-kclmxkpywin32-216-py2.7-win32.egg.tmp' to it
creating d:testsandbox_virtenvlibsite-packagespywin32-216-py2.7-win32.egg
Extracting pywin32-216-py2.7-win32.egg to d:testsandbox_virtenvlibsite-packages
Adding pywin32 216 to easy-install.pth file
Installing pywin32_postinstall.py script to D:testsandbox_virtenvScripts
Installing pywin32_postinstall.pyc script to D:testsandbox_virtenvScripts
Installing pywin32_testall.py script to D:testsandbox_virtenvScripts
Installing pywin32_testall.pyc script to D:testsandbox_virtenvScripts

Installed d:testsandbox_virtenvlibsite-packagespywin32-216-py2.7-win32.egg
Processing dependencies for pywin32==216
Searching for pywin32==216
Reading http://pypi.python.org/simple/pywin32/
Reading http://sf.net/projects/pywin32
Reading https://sourceforge.net/projects/pywin32/files/pywin32/
Reading http://sourceforge.net/project/showfiles.php?group_id=78018
No local packages or download links found for pywin32==216
Best match: None
Traceback (most recent call last):
  File "D:testsandbox_virtenvScriptseasy_install-script.py", line 8, in <module>
    load_entry_point('setuptools==0.6c11', 'console_scripts', 'easy_install')()
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 1712, in main
    with_ei_usage(lambda:
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 1700, in with_ei_usage
    return f()
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 1716, in <lambda>
    distclass=DistributionWithoutHelpCommands, **kw
  File "c:Python27Libdistutilscore.py", line 152, in setup
    dist.run_commands()
  File "c:Python27Libdistutilsdist.py", line 953, in run_commands
    self.run_command(cmd)
  File "c:Python27Libdistutilsdist.py", line 972, in run_command
    cmd_obj.run()
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 211, in run
    self.easy_install(spec, not self.no_deps)
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 422, in easy_install
    return self.install_item(None, download, tmpdir, deps, True)
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 478, in install_item
    self.process_distribution(spec, dist, deps)
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 519, in process_distribution
    [requirement], self.local_index, self.easy_install
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggpkg_resources.py", line 563, in resolve
    dist = best[req.key] = env.best_match(req, self, installer)
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggpkg_resources.py", line 799, in best_match
    return self.obtain(req, installer) # try and download/install
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggpkg_resources.py", line 811, in obtain
    return installer(requirement)
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolscommandeasy_install.py", line 434, in easy_install
    self.local_index
  File "D:testsandbox_virtenvlibsite-packagessetuptools-0.6c11-py2.7.eggsetuptoolspackage_index.py", line 475, in fetch_distribution
    return dist.clone(location=self.download(dist.location, tmpdir))
AttributeError: 'NoneType' object has no attribute 'clone'

(sandbox_virtenv) D:testpy2exe_test>

Теперь я могу импортировать из python win32api, и это довольно запутанно

(sandbox_virtenv) D:testpy2exe_test>python
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32api
>>>

Если вы найдете здесь что-то непонятно, спрашивайте меня. Спасибо за Ваши советы.

4 ответов


Я понял это, но процесс не приятный.

есть 3 проблемы с установщиком PyWin32:

  1. он считывает ваше местоположение установки python из реестра.
  2. is предполагает, что ваш каталог lib является дочерним каталогом, содержащим python.exe
  3. он сбрасывает 3 DLL в %WINDIR%\system32

Итак, если вы используете 64-битный python 2.7 на 64-битных окнах или 32 на 32, и ваша виртуальная среда находится в c:\scratch\env1\ процесс выглядит следующим образом:

  1. копировать python.exe и pythonw.exe от c:\scratch\env1\scripts к c:\scratch\env1
  2. обновите значение" (по умолчанию) " в разделе реестра HKLM\SOFTWARE\Python\PythonCore\2.7\InstallPath\ to "c:\scratch\env1\" (убедитесь, что вы записываете старое значение.)
  3. из командной строки, где вы активировали виртуальную среду, установите PyWin32, запустив программу установки.ехе напрямую. Не использовать easy_install.
  4. установите ключ реестра InstallPath обратно в исходное значение
  5. удалить python.exe и pythonw.exe от c:\scratch\env1\
  6. переместить pythoncom27.dll, pywintypes27.dll и pythoncomloader27.dll из %WINDIR%\system32\ в c:\scratch\env1\ (не двигайтесь python27.dll или вы пожалеете об этом)

Это работает достаточно хорошо, чтобы запустить django-mssql в виртуальной среде без установки pywin32 вне виртуальной окружающая среда.


С последней virtualenv-1.7.1.2, попробуйте создать virtualenv с --distribute флаг. Мне удалось решить ту же проблему, что и у вас, добавив флаг.

на связанной заметке, на другой машине (та же ОС, Windows Server 2008 R2), мне пришлось создать virtualenv без на --distribute флаг, иначе всякий раз, когда я запустить easy_install откроется новая командная строка.

Virtualenv на Windows, как темное искусство.


к сожалению, поддержка 64-битного Python в Windows относительно бедна, чем 32-битная версия. Это не вина сообщества Python, а относительная сложность получения бесплатных компиляторов для 64-битных окон.

Если вы установили 64-битную версию Python, вам также нужно использовать пакеты, построенные для 64bit. Некоторые простые пакеты Python (написанные на чистом Python и не требующие внешних библиотек/C) будут установлены как обычно с помощью setuptools/easy_install/virtualenv. Много однако 64-битные пакеты могут сломаться при установке в virtualenv и потребуют установки.

к счастью, вы можете найти 64-битные предварительно скомпилированные установщики для популярных пакетов здесь. Сначала попробуйте пакет там. Установщик будет нацелен на глобальную / основную установку Python и, таким образом, не изолирован virtualenv. Обратите внимание, однако, что это неофициально сборки: предоставляется бесплатно для вашего удобства, поэтому, пожалуйста, не судитесь с провайдером, если что-то не получится (или ожидать помощи).


Это старый вопрос, но недавно столкнулся с этой проблемой, и я хочу поделиться тем, что я сделал, чтобы сделать эту работу. Я искал реализацию kerberos python в windows, и я нашел kerbeors_sspi, который использует pywin32. все это устанавливается с помощью pip, но pywin32 не может быть установлен с помощью pip внутри virtualenv.

поэтому я исправил библиотеку kerberos_sspi для использования pypiwin32, которая представляет собой колесо, упакованное глифом и el (twisted creator BTW). И теперь все это работает удивительно, но если вы хотите получить доступ к COM-материалу, вам нужно вручную установить pywin32, потому что он должен быть зарегистрирован в системе.

вот ссылка на индекс pypiwin32

спасибо,