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

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

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

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

И вот мой полный журнал:

(sandbox_virtenv) D:\test\py2exe_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:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\bdist_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:\users\antp~1.kyi\appdata\local\temp\easy_install-kclmxk\pywin32-216-py2.7-win32.egg' and adding 'c:\users\antp~1.kyi\appdata\local\temp\easy_install-kclmxk\pywin32-216-py2.7-win32.egg.tmp' to it
creating d:\test\sandbox_virtenv\lib\site-packages\pywin32-216-py2.7-win32.egg
Extracting pywin32-216-py2.7-win32.egg to d:\test\sandbox_virtenv\lib\site-packages
Adding pywin32 216 to easy-install.pth file
Installing pywin32_postinstall.py script to D:\test\sandbox_virtenv\Scripts
Installing pywin32_postinstall.pyc script to D:\test\sandbox_virtenv\Scripts
Installing pywin32_testall.py script to D:\test\sandbox_virtenv\Scripts
Installing pywin32_testall.pyc script to D:\test\sandbox_virtenv\Scripts

Installed d:\test\sandbox_virtenv\lib\site-packages\pywin32-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:\test\sandbox_virtenv\Scripts\easy_install-script.py", line 8, in <module>
    load_entry_point('setuptools==0.6c11', 'console_scripts', 'easy_install')()
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 1712, in main
    with_ei_usage(lambda:
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 1700, in with_ei_usage
    return f()
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 1716, in <lambda>
    distclass=DistributionWithoutHelpCommands, **kw
  File "c:\Python27\Lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "c:\Python27\Lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "c:\Python27\Lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 211, in run
    self.easy_install(spec, not self.no_deps)
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 422, in easy_install
    return self.install_item(None, download, tmpdir, deps, True)
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 478, in install_item
    self.process_distribution(spec, dist, deps)
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 519, in process_distribution
    [requirement], self.local_index, self.easy_install
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\pkg_resources.py", line 563, in resolve
    dist = best[req.key] = env.best_match(req, self, installer)
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\pkg_resources.py", line 799, in best_match
    return self.obtain(req, installer) # try and download/install
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\pkg_resources.py", line 811, in obtain
    return installer(requirement)
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\command\easy_install.py", line 434, in easy_install
    self.local_index
  File "D:\test\sandbox_virtenv\lib\site-packages\setuptools-0.6c11-py2.7.egg\setuptools\package_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:\test\py2exe_test>

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

(sandbox_virtenv) D:\test\py2exe_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
>>>

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

Ответ 1

Я понял это, но процесс не нравится.

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

  • Он считывает ваше местоположение установки python из реестра.
  • Предполагается, что ваш каталог lib является дочерним по отношению к каталогу, содержащему python.exe
  • Отбрасывает 3 dlls в% WINDIR%\system32

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

  • Скопировать python.exe и pythonw.exe из c:\scratch\env1\scripts в c:\scratch\env1
  • Обновить значение "(по умолчанию)" в разделе реестра HKLM\SOFTWARE\Python\PythonCore\2.7\InstallPath\to "c:\scratch\env1 \" (убедитесь, что вы записали старое значение.)
  • В командной строке, где вы активировали виртуальную среду, установите PyWin32, запустив файл installer.exe напрямую. Не используйте easy_install.
  • Установите для реестра реестра InstallPath исходное значение
  • Удалить python.exe и pythonw.exe из c:\scratch\env1\
  • переместите pythoncom27.dll, pywintypes27.dll и pythoncomloader27.dll из% WINDIR%\system32\в c:\scratch\env1\(не перемещайте файл python27.dll или вы не пожалеете)

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

Ответ 2

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

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

Virtualenv в Windows похож на темное искусство.

Ответ 3

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

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

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

Ответ 4

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

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

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

Приветствия,