Установка пакета в виртуальную среду в Windows 7

#python #windows #virtualenv

#python #Windows #virtualenv

Вопрос:

Я привык программировать на Mac или Linux, где установка пакетов в виртуальную среду относительно проста. К сожалению, это, похоже, не относится к Windows. Я пытался установить lxml в виртуальную среду на 64-разрядной машине с Windows 7.

Сначала я использовал pip (мой любимый инструмент):

 (lxml_tutorial) PS C:UsersspearscDocumentspython_projectslxml_tutorial> pip install lxml
Downloading/unpacking lxml
  Running setup.py (path:c:usersspearscappdatalocaltemppip_build_spearsclxmlsetup.py) egg_info for package lxml
    Building lxml version 3.3.5.
    Building without Cython.
    ERROR: 'xslt-config' is not recognized as an internal or external command,
    operable program or batch file.

    ** make sure the development packages of libxml2 and libxslt are installed **

    Using build configuration of libxslt
    C:Python27libdistutilsdist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
      warnings.warn(msg)

    warning: no previously-included files found matching '*.py'
Installing collected packages: lxml
  Running setup.py install for lxml
    Building lxml version 3.3.5.
    Building without Cython.
    ERROR: 'xslt-config' is not recognized as an internal or external command,
    operable program or batch file.

    ** make sure the development packages of libxml2 and libxslt are installed **

    Using build configuration of libxslt
    building 'lxml.etree' extension
    gcc -mno-cygwin -mdll -O -Wall -Ic:usersspearscappdatalocaltemppip_build_spearsclxmlsrclxmlincludes -IC:P
ython27include -IC:Python27PC -c srclxmllxml.etree.c -o buildtemp.win-amd64-2.7Releasesrclxmllxml.etree.o -w
    C:Python27libdistutilsdist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'
      warnings.warn(msg)
    error: command 'gcc' failed: No such file or directory
    Complete output from command C:Python27python.exe -c "import setuptools, tokenize;__file__='c:\users\spearsc\ap
pdata\local\temp\pip_build_spearsc\lxml\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().rep
lace('rn', 'n'), __file__, 'exec'))" install --record c:usersspearscappdatalocaltemppip-c22v0y-recordinstall-r
ecord.txt --single-version-externally-managed --compile:
    Building lxml version 3.3.5.

Building without Cython.

ERROR: 'xslt-config' is not recognized as an internal or external command,

operable program or batch file.



** make sure the development packages of libxml2 and libxslt are installed **



Using build configuration of libxslt

running install

running build

running build_py

creating build

creating buildlib.win-amd64-2.7

creating buildlib.win-amd64-2.7lxml

copying srclxmlbuilder.py -> buildlib.win-amd64-2.7lxml

copying srclxmlcssselect.py -> buildlib.win-amd64-2.7lxml

copying srclxmldoctestcompare.py -> buildlib.win-amd64-2.7lxml

copying srclxmlElementInclude.py -> buildlib.win-amd64-2.7lxml

copying srclxmlpyclasslookup.py -> buildlib.win-amd64-2.7lxml

copying srclxmlsax.py -> buildlib.win-amd64-2.7lxml

copying srclxmlusedoctest.py -> buildlib.win-amd64-2.7lxml

copying srclxml_elementpath.py -> buildlib.win-amd64-2.7lxml

copying srclxml__init__.py -> buildlib.win-amd64-2.7lxml

creating buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludes__init__.py -> buildlib.win-amd64-2.7lxmlincludes

creating buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlbuilder.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlclean.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmldefs.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmldiff.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlElementSoup.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlformfill.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlhtml5parser.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlsoupparser.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtmlusedoctest.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtml_diffcommand.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtml_html5builder.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtml_setmixin.py -> buildlib.win-amd64-2.7lxmlhtml

copying srclxmlhtml__init__.py -> buildlib.win-amd64-2.7lxmlhtml

creating buildlib.win-amd64-2.7lxmlisoschematron

copying srclxmlisoschematron__init__.py -> buildlib.win-amd64-2.7lxmlisoschematron

copying srclxmllxml.etree.h -> buildlib.win-amd64-2.7lxml

copying srclxmllxml.etree_api.h -> buildlib.win-amd64-2.7lxml

copying srclxmlincludesc14n.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesconfig.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesdtdvalid.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesetreepublic.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludeshtmlparser.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesrelaxng.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesschematron.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludestree.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesuri.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxinclude.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxmlerror.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxmlparser.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxmlschema.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxpath.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesxslt.pxd -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludesetree_defs.h -> buildlib.win-amd64-2.7lxmlincludes

copying srclxmlincludeslxml-version.h -> buildlib.win-amd64-2.7lxmlincludes

creating buildlib.win-amd64-2.7lxmlisoschematronresources

creating buildlib.win-amd64-2.7lxmlisoschematronresourcesrng

copying srclxmlisoschematronresourcesrngiso-schematron.rng -> buildlib.win-amd64-2.7lxmlisoschematronresources
rng

creating buildlib.win-amd64-2.7lxmlisoschematronresourcesxsl

copying srclxmlisoschematronresourcesxslRNG2Schtrn.xsl -> buildlib.win-amd64-2.7lxmlisoschematronresourcesxsl

copying srclxmlisoschematronresourcesxslXSD2Schtrn.xsl -> buildlib.win-amd64-2.7lxmlisoschematronresourcesxsl

creating buildlib.win-amd64-2.7lxmlisoschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1iso_abstract_expand.xsl -> buildlib.win-amd64-2.7lxm
lisoschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1iso_dsdl_include.xsl -> buildlib.win-amd64-2.7lxmli
soschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1iso_schematron_message.xsl -> buildlib.win-amd64-2.7
lxmlisoschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1iso_schematron_skeleton_for_xslt1.xsl -> buildlib.win
-amd64-2.7lxmlisoschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1iso_svrl_for_xslt1.xsl -> buildlib.win-amd64-2.7lxml
isoschematronresourcesxsliso-schematron-xslt1

copying srclxmlisoschematronresourcesxsliso-schematron-xslt1readme.txt -> buildlib.win-amd64-2.7lxmlisoschematr
onresourcesxsliso-schematron-xslt1

running build_ext

building 'lxml.etree' extension

creating buildtemp.win-amd64-2.7

creating buildtemp.win-amd64-2.7Release

creating buildtemp.win-amd64-2.7Releasesrc

creating buildtemp.win-amd64-2.7Releasesrclxml

gcc -mno-cygwin -mdll -O -Wall -Ic:usersspearscappdatalocaltemppip_build_spearsclxmlsrclxmlincludes -IC:Pytho
n27include -IC:Python27PC -c srclxmllxml.etree.c -o buildtemp.win-amd64-2.7Releasesrclxmllxml.etree.o -w

C:Python27libdistutilsdist.py:267: UserWarning: Unknown distribution option: 'bugtrack_url'

  warnings.warn(msg)

error: command 'gcc' failed: No such file or directory

----------------------------------------
Cleaning up...
Command C:Python27python.exe -c "import setuptools, tokenize;__file__='c:\users\spearsc\appdata\local\temp\pip_b
uild_spearsc\lxml\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('rn', 'n'), __fil
e__, 'exec'))" install --record c:usersspearscappdatalocaltemppip-c22v0y-recordinstall-record.txt --single-versio
n-externally-managed --compile failed with error code 1 in c:usersspearscappdatalocaltemppip_build_spearsclxml
Storing debug log for failure in C:Usersspearscpippip.log
  

Я уже видел эту ошибку раньше. Я думаю, это вызвано тем, что компилятор C не установлен. По прошлому опыту я знал, что устранение этой проблемы — огромная проблема, поэтому я решил попробовать другой метод.

Я пошел в http://www.lfd.uci.edu /~gohlke/pythonlibs/ и загрузил exe-файл для lxml. Затем я активировал свою виртуальную среду и запустил в ней исполняемый файл. Библиотека была установлена глобально, чего я не хотел, поэтому я удалил lxml.

Для моей третьей попытки я активировал свою виртуальную среду и использовал easy_install для установки lxml. И снова пакет был установлен глобально! Я удалил lxml с помощью pip.

Я действительно разочарован. Мне просто нужно будет установить все мои пакеты глобально и забыть об использовании виртуальных сред? Большинство решений, которые я видел в Интернете, кажутся устаревшими.

Ответ №1:

После установки lxml из http://www.lfd.uci.edu /~gohlke/pythonlibs/#lxml, из "C:/python/lib/site-packages" , скопируйте и вставьте следующие файлы в вашу виртуальную среду «/lib/site-packages».

  1. lxml (папка)
  2. lxml-3.3.5-py2.7.egg-информация (папка)

Ответ №2:

Хм, когда я использую свою виртуальную среду easy_install , она устанавливается только в этой виртуальной среде, а не глобально.

Но помимо этого, еще один способ сделать это — создать колесо из .exe и pip install это. (Колесо /.whl — это новый стандарт, заменяющий формат .egg. См., среди прочего, PEP 427 или readthedocs.)

Выполните следующие действия:

  • pip install wheel
  • загрузите .exe
  • wininst2wheel.exe <downloaded .exe file>
  • pip install <created .whl file>

Комментарии:

1. Заставил его работать! Хитрость заключается в использовании pip внутри виртуальной среды. Для того, чтобы создать . whl-файл, я использовал wininst2wheel.py . Я не смог найти wininst2wheel.exe . Конечно, после всех взломов я мог бы, вероятно, просто скопировать папки в каталог site-packages в моей виртуальной среде. Я предполагаю, что это тоже сработало бы.