В Python 3 я получаю сообщение об ошибке при импорте пакета «noise» от Caseman. Кто-нибудь знает, как это исправить?

Я пишу (действительно неуклюжую) 2D-моделацию жидкости на Python. В настоящее время я генерирую начальное состояние для сима, просто заполняя 2d-массив случайными числами с плавающей запятой, сгенерированными модулем random, а затем размываю текстуру, усредняя каждую ячейку с окружающими ее ячейками. Это очень медленно и создает несколько блочную текстуру шума из-за квадратной формы размытия. Поэтому, когда мне надоело время от времени ждать по десять секунд, пока Python сгенерирует новую случайную сетку, я решил потратить, как мне казалось, всего десять минут на то, чтобы выяснить, как использовать для этого библиотеку. Пять часов спустя я оказываюсь там же, где и начал, только еще больше расстроенным. Я пытался установить этот пакет с помощью команды pip install noise, но каждый раз, когда я пытаюсь выполнить команду, возвращается одна и та же ошибка, даже после того, как я попробовал все остальные исправления подобных проблем, которые я смог найти. Ошибка выглядит следующим образом:

Defaulting to user installation because normal site-packages is not writeable
Collecting noise
  Using cached noise-1.2.2.zip (132 kB)
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: noise
  Building wheel for noise (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [31 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win32-cpython-312
      creating build\lib.win32-cpython-312\noise
      copying perlin.py -> build\lib.win32-cpython-312\noise
      copying shader.py -> build\lib.win32-cpython-312\noise
      copying shader_noise.py -> build\lib.win32-cpython-312\noise
      copying test.py -> build\lib.win32-cpython-312\noise
      copying __init__.py -> build\lib.win32-cpython-312\noise
      running build_ext
      building 'noise._simplex' extension
      creating build\temp.win32-cpython-312
      creating build\temp.win32-cpython-312\Release
      "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD "-IC:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\include" "-IC:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Include" "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include" "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include" "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" /Tc_simplex.c /Fobuild\temp.win32-cpython-312\Release\_simplex.obj
      _simplex.c
      _simplex.c(235): warning C4244: 'return': conversion from 'double' to 'float', possible loss of data
      _simplex.c(296): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
      _simplex.c(297): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
      _simplex.c(308): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
      _simplex.c(309): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
      "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\HostX86\x86\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\libs" "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0" "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\PCbuild\win32" "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x86" "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x86" /EXPORT:PyInit__simplex build\temp.win32-cpython-312\Release\_simplex.obj /OUT:build\lib.win32-cpython-312\noise\_simplex.cp312-win_amd64.pyd /IMPLIB:build\temp.win32-cpython-312\Release\_simplex.cp312-win_amd64.lib
         Creating library build\temp.win32-cpython-312\Release\_simplex.cp312-win_amd64.lib and object build\temp.win32-cpython-312\Release\_simplex.cp312-win_amd64.exp
      _simplex.obj : error LNK2001: unresolved external symbol __imp__PyFloat_FromDouble
      _simplex.obj : error LNK2001: unresolved external symbol __imp__PyErr_SetString
      _simplex.obj : error LNK2001: unresolved external symbol __imp__PyExc_ValueError
      _simplex.obj : error LNK2001: unresolved external symbol __imp__PyModule_Create2
      _simplex.obj : error LNK2001: unresolved external symbol __imp__PyArg_ParseTupleAndKeywords
      build\lib.win32-cpython-312\noise\_simplex.cp312-win_amd64.pyd : fatal error LNK1120: 5 unresolved externals
      error: command 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x86\\link.exe' failed with exit code 1120
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for noise
  Running setup.py clean for noise
Failed to build noise
ERROR: Could not build wheels for noise, which is required to install pyproject.toml-based projects

Я пробовал обновить колесо, инструменты настройки, Cmake, pip, Python и даже PowerShell, но безрезультатно. Я также добавил все каталоги, связанные с Python, в PATH. Ничего не помогло, все равно получаю ту же ошибку.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Из настроек решателя я вижу, что установлена ​​зависимость пакета шума, которая потенциально могла быть скомпилирована неправильным образом. Все еще существуют некоторые неопределенные ссылки во время компоновки на функции в библиотеке и системе Python, которые привели к следующим сообщениям об ошибках. Это может быть связано с рядом причин, например, с отсутствующими зависимостями или наличием другой версии компилятора. Одним из возможных решений всех проблем, описанных выше, является установка элемента из заранее созданного двоичного файла, а не компиляция его из исходного кода. Для этого убедитесь, что указанная вами версия пакета соответствует версии Python и операционной системе, которые будут использоваться. Если это невозможно, вы всегда можете использовать более раннюю версию пакета, которая потенциально может быть лучше для использования в ваших случаях.

поэтому вместо установки через pip мне следует просто загрузить .zip из индекса пакетов Python или GitHub и извлечь его в каталог пакетов сайта Python?

Otto Moir 02.06.2024 15:09

Я попробовал это, и теперь Пип просто говорит WARNING: Package(s) not found: noise, когда я бегу pip show noise

Otto Moir 03.06.2024 04:26
From the solver settings I see that there is a noise package dependency installed that could potentially have been compiled in a wrong manner. Я не знаю, где вы это видите в предоставленном выводе.
FlyingTeller 03.06.2024 08:29

@OttoMoir, это не сработает. Архивы на pypi представляют собой дистрибутивы с исходным кодом и не могут быть скопированы в пакет сайта как есть. Вам нужно будет скомпилировать этот модуль

FlyingTeller 03.06.2024 08:30
Ответ принят как подходящий

Пакет, который вы пытаетесь установить, содержит код C, поэтому его необходимо скомпилировать.

Однако у вас проблема с вашей цепочкой инструментов:

Вы используете компилятор/компоновщик x86, см. HostX86\x86\cl.exe и ...HostX86\x86\link.exe — убедитесь, что у вас 64-битный Python и что вы выполняете C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat, прежде чем пытаться выполнить pip install

Кроме того, у вас могут возникнуть проблемы с совместимостью:

Библиотека, которую вы пытаетесь установить, последний раз обновлялась в 2015 году. Мне кажется, что недостающие символы должны присутствовать и в Python 3.12, но нет гарантии, что установка в эту версию Python пройдет без проблем. Если после того, как вы убедились, что вы компилируете для x64, у вас все еще есть проблемы, попробуйте понизить версию Python до более низкой версии.

Другие вопросы по теме