Это не основательный ответ. Но я выделю несколько проблем, связанных с поиском решения. Скорее всего, описанная выше проблема подобна раку, вызванному несколькими факторами, действующими одновременно катастрофически.
У меня точно такая же проблема, как и в OP, при попытке использовать собственные пакеты Python, поставляемые Cygwin, на моем компьютере с Windows Vista. Будучи новичком в Python, я потратил несколько дней, пытаясь заставить это работать, и понял, почему это не работает. Но все мои гугл-фу ничего не дали, кроме бесчисленных тупиков. Итак, вот мой взгляд на это.
Есть много причин, по которым у Python могут возникнуть проблемы с Cygwin, с некоторыми из которых вы можете что-то сделать, а некоторые не поддаются контролю большинства людей. К чему это сводится, так это к следующим ключевым вопросам:
Windows — это полный беспорядок, когда дело доходит до прав доступа к файлам, а Cygwin не очень хорошо справляется с правами доступа к файлам Windows. Итак, то, что вы видите в Cygwin, далеко не вся история.
Windows позорно не зависит от регистра символов, что вызывает массу проблем, особенно когда вам нужно (кросс) скомпилировать что-либо, что изначально было разработано в системе на основе * nix (то есть все). На самом деле, если вы попытаетесь извлечь любой архив, содержащий файлы, имена которых отличаются только заглавными буквами. (т. е. «makefile» или «Makefile» и т. д.) под Windows или Cygwin, вы потеряете все файлы, кроме одного. в случае, если вам нужно включить чувствительность к регистру, чтобы делать что-то большее, чем компиляции «hello world» * nix.
Windows обрабатывает символические ссылки совершенно иначе, чем Cygwin. И если ваши ZIP, TAR и т.п. архивы содержат символические ссылки, они будут повреждены после распаковки в среду Windows.
Неаккуратная практика кода, когда разработчик не тестировал должным образом свои творения в различных средах или тщательно не устанавливал правильные права доступа к файлам для своих *.tar.gz
коллекций. Включение правильных спецификаций зависимостей или упоминание о том, были ли бинарные файлы статически связаны и т. д.
Для получения полной информации и дальнейших (Win-Cygwin) проблем см. noreferrer">ЗДЕСЬ.
Сначала я пытался использовать собственный Python от Cygwin без каких-либо дополнительных пакетов и устанавливать lxml с помощью PIP и easy_install. Затем я попытался использовать собственные пакеты Cygwin libxml2, libxslt и xml python, и у меня были те же проблемы.
Сначала, после установки статических двоичных файлов Windows (как было предложено в другом месте), я получил эту ошибку:
File "/usr/lib/python2.7/site-packages/lxml-3.2.4-py2.7-cygwin-1.7.24-i686.egg/lxml/etree.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: Permission denied
Aborted (core dumped)
Затем я проверил права доступа к файлам и изменил их на: chmod -R 755 /usr/lib/python2.7/
Я сделал еще один шаг, чтобы изолировать проблему от явно отсутствующего файла. И включение подробного и диагностического режима тоже не сильно помогло.
File "/usr/lib/python2.7/site-packages/lxml-3.2.4-py2.7-cygwin-1.7.24-i686.egg/lxml/etree.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: No such file or directory
Aborted (core dumped)
ЗДЕСЬ — точная спецификация инструкции:
Загрузите и инициализируйте модуль, реализованный как динамически загружаемая разделяемая библиотека, и верните его объект модуля. Если модуль уже был инициализирован, он будет инициализирован снова. Повторная инициализация включает копирование атрибута __dict__
кэшированного экземпляра модуля вместо значения, используемого в модуле, кэшированном в sys.modules. Аргумент pathname должен указывать на разделяемую библиотеку. Аргумент name используется для построения имени функции инициализации: вызывается внешняя функция C, называемая initname() в разделяемой библиотеке. Необязательный аргумент файла игнорируется. (Примечание: использование разделяемых библиотек сильно зависит от системы, и не все системы его поддерживают.)
Поэтому я начал читать веб-сайт lxml, где четко указаны зависимости lxml от обоих libxml2 и libxslt, и если они не связаны статически, они также зависят от iconv и zlib. Итак, вы пришли к выводу, что вам нужно установить все это. Не надо! Продолжить чтение. Но если вы собираетесь собирать из исходников (что может попытаться сделать easy_install), вам понадобится все, включая библиотеки заголовков для разработки: libxml2-devel, libxslt-devel. В другом месте говорится, что вам также нужен Cython и установка с помощью:
easy_install lxml==dev
Зависимости показаны на этом рисунке из ЗДЕСЬ:
![зависимости libxml](https://i.stack.imgur.com/b4aX0.png)
Итак, вы думаете, что вам может сойти с рук что-то вроде:
STATIC_DEPS=true pip install lxml
Но это тоже не работает. Вероятно, потому что библиотеки, используемые для компиляции Cygwin Python, должны быть такими же, как и для компиляции lxml. Но я не знаю. Обратите внимание, что пакет lxml ссылается на Cygwin "1.7.24". Мой Cygwin уже "1.7.25", и вы можете проверить это с помощью uname -a
. Затем вы можете проверить свой статический исполняемый файл Python с помощью file
и ldd
. Тогда вы понимаете, что это также зависит от C-компилятора, используемого для сборки python/cygwin под Windows или *nix. Почувствовав запах кошмара, я решил, что строить свой собственный — не лучший путь. Затем я попытался установить библиотеки Python (поставляемые в виде исполняемых файлов), предназначенные для Windows Python. Это не сработало, так как у меня никогда не устанавливался собственный Python для Windows, и меня встретила ошибка, что установленный Python не может найти Python в моем реестре. Я мог бы, конечно, просто извлечь исполняемый файл, но я бы не знал, куда положить двоичные файлы без установщика. Так что у меня появилась другая идея...
Насколько я вижу, есть 3 возможных решения, чтобы заставить это работать.
Простой способ установки собственного интерпретатора Python для Windows. Вы потеряете некоторые собственные функции Cygwin, если не установите их в нужное место: /usr/lib/python2.7 и не убедитесь, что Cygwin может их найти и использовать. Это также использует другие права доступа к файлам, чувствительность к регистру и набор символов (UTF-16LE), чем Cygwin (UTF-8), что потенциально может создать много других проблем в будущем! Сложность: простая
Продолжайте взламывать Cygwin's Python, чтобы заставить его работать с бинарными библиотеками, используемыми в (1). Но для этого требуется:
- a) Uninstall and remove all Cygwin Python packages, except bare Python interpreter.
- б) Удалите все PIP и следы простой установки.
- c) Взлом реестра Windows, чтобы притвориться, что у вас установлен Python27:
- HKEY_LOCAL_MACHINE\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Python\PythonCore\2.7\InstallPath C:\Python27\
- HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\PythonPath C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk
- HKEY_CLASSES_ROOT...
- г) Установите бинарные библиотеки Windows.
- e) Надеюсь, все остальное теперь должно работать с PIP или easy_install. Сложность: средняя!
Делать это правильно, компилируя Python и все библиотеки с нуля. Сложность: Тяжело!
Я успешно сделал (1), но я все еще думаю, что (2) - это более разумный способ сделать это, но я не проверял его, поэтому я не считаю это хорошим ответом. КСТАТИ. Еще одна причуда: мне приходится запускать интерпретатор с помощью: python.exe -E
, чтобы избежать раздражающего: "SyntaxError: недопустимый синтаксис" при нажатии клавиши возврата!
Вывод:
По-видимому, вам не нужны пакеты Python libxml2 и libxslt для использования lxml! В моем случае мне понадобился Scrapy, поэтому мне также пришлось установить несколько других пакетов.
$ pip.exe list
cssselect (0.9.1)
lxml (3.2.4)
pip (1.4.1)
pyOpenSSL (0.11)
pywin32 (218)
queuelib (1.1.1)
Scrapy (0.20.0)
setuptools (1.4.1)
six (1.4.1)
Twisted (13.2.0)
w3lib (1.5)
zope.interface (4.0.5)
$ll /cygdrive/c/Python27/Lib/site-packages/
adodbapi
cssselect
isapi
lxml
OpenSSL
pip
pythonwin
pywin32_system32
queuelib
scrapy
twisted
w3lib
win32
win32com
win32comext
zope
cssselect-0.9.1-py2.7.egg-info
lxml-3.2.4-py2.7.egg-info
pip-1.4.1-py2.7.egg-info
queuelib-1.1.1-py2.7.egg-info
Scrapy-0.20.0-py2.7.egg-info
six-1.4.1-py2.7.egg-info
Twisted-13.2.0-py2.7.egg-info
w3lib-1.5-py2.7.egg-info
zope.interface-4.0.5-py2.7.egg-info
PyWin32.chm
setuptools-1.4.1-py2.7.egg
pyOpenSSL-0.11-py2.7.egg-info
pywin32-218-py2.7.egg-info
easy-install.pth
pywin32.pth
setuptools.pth
zope.interface-4.0.5-py2.7-nspkg.pth
pythoncom.py
six.py
pythoncom.pyc
six.pyc
pythoncom.pyo
pywin32.version.txt
README.txt
Полезные ссылки:
person
not2qubit
schedule
26.11.2013