lxml установлен с conda: «Ошибка импорта: ошибка загрузки DLL: указанная процедура не найдена» - PullRequest
0 голосов
/ 07 января 2019

Я использую anaconda на windows 10 с последней версией conda 4.5.12. Я создаю очень простую тестовую среду для установки lxml с python 3.6.6.

Вот мой файл environment.yml:

channels:
- defaults
dependencies:
- python=3.6.6
- lxml

Затем я создаю env, используя conda:

conda env create -f environment_test.yml -n test26

Вот список пакетов после установки:

(test26) C:>conda list
# packages in environment at C:\Program Files\Anaconda3\envs\test26:
#
# Name                    Version                   Build  Channel
certifi                   2018.11.29               py36_0    defaults
libiconv                  1.15                 h1df5818_7    defaults
libxml2                   2.9.8                hadb2253_1    defaults
libxslt                   1.1.32               hf6f1972_0    defaults
lxml                      4.2.5            py36hef2cd61_0    defaults
pip                       18.1                     py36_0    defaults
python                    3.6.6                hea74fb7_0    defaults
setuptools                40.6.3                   py36_0    defaults
vc                        14.1                 h0510ff6_4    defaults
vs2015_runtime            14.15.26706          h3a45250_0    defaults
wheel                     0.32.3                   py36_0    defaults
wincertstore              0.2              py36h7fe50ca_0    defaults
zlib                      1.2.11               h62dcd97_3    defaults

Пока все хорошо. Проблема в том, когда я пытался импортировать пакет lxml

(test26) C:>python
Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 11:27:44) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The specified procedure could not be found.

С подробной информацией (еще один тест с env: "test29"):

>>> from lxml import etree
# C:\Program Files\Anaconda3\envs\test29\lib\site-packages\lxml\__pycache__\__init__.cpython-36.pyc matches C:\Program Files\Anaconda3\envs\test29\lib\site-packages\lxml\__init__.py
# code object from 'C:\\Program Files\\Anaconda3\\envs\\test29\\lib\\site-packages\\lxml\\__pycache__\\__init__.cpython-36.pyc'
import 'lxml' # <_frozen_importlib_external.SourceFileLoader object at 0x00000160F1B643C8>
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1023, in _handle_fromlist
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: The specified procedure could not be found.

Как я могу отладить эту проблему? Я пропустил зависимость?

В MacOS я не вижу проблемы, поэтому она кажется специфичной для Windows. Есть ли более старая версия, работающая на Windows (я пробовал 4.1.1 и 4.2.1)

Конверт создается / активируется с помощью приглашения Anaconda в Windows 10, а энв активируется с помощью:

conda activate env test29

1 Ответ

0 голосов
/ 29 января 2019

Одна из вещей, которую мы обнаруживаем, заключается в том, что некоторые приложения создают какую-то библиотеку в C: \ Windows \ System32 \, и это очень плохая практика. В конце я сделал следующее:

  1. удалить C: \ Windows \ System32 \ libxml2.dll
  2. удалить C: \ Windows \ System32 \ iconv.dll

Все хорошо работает с этим env, и до сих пор у меня возникли проблемы с моими приложениями Windows. Спасибо Рэю из команды Анаконды за помощь.

...