Использование PyPlot в Julia выдает ошибку: неправильно установлен PyCall

#python #matplotlib #error-handling #package #julia

#питон #matplotlib #обработка ошибок #упаковка #джулия

Вопрос:

Я новичок в Julia. Я пытаюсь импортировать «PyPlot» с помощью

 using PyPlot
 

но он всегда возвращает следующую ошибку:

 [ Info: Precompiling PyPlot [d330b81b-6aea-500a-939a-2ce795aea3ee]
ERROR: LoadError: LoadError: PyCall not properly installed. Please run Pkg.build
("PyCall")
Stacktrace:
 [1] error(::String) at .error.jl:33
 [2] top-level scope at C:UsersCarlos.juliapackagesPyCallBcTLpsrcstartup
.jl:44
 [3] include(::Function, ::Module, ::String) at .Base.jl:380
 [4] include at .Base.jl:368 [inlined]
 [5] include(::String) at C:UsersCarlos.juliapackagesPyCallBcTLpsrcPyCal
l.jl:1
 [6] top-level scope at C:UsersCarlos.juliapackagesPyCallBcTLpsrcPyCall.
jl:38
 [7] include(::Function, ::Module, ::String) at .Base.jl:380
 [8] include(::Module, ::String) at .Base.jl:368
 [9] top-level scope at none:2
 [10] eval at .boot.jl:331 [inlined]
 [11] eval(::Expr) at .client.jl:467
 [12] top-level scope at .none:3
in expression starting at C:UsersCarlos.juliapackagesPyCallBcTLpsrcstart
up.jl:41
in expression starting at C:UsersCarlos.juliapackagesPyCallBcTLpsrcPyCal
l.jl:38
ERROR: LoadError: Failed to precompile PyCall [438e738f-606a-5dbb-bf0a-cddfbfd45
ab0] to C:UsersCarlos.juliacompiledv1.5PyCallGkzkC_NvSXt.ji.
Stacktrace:
 [1] error(::String) at .error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at .loading.jl:1290
 [3] _require(::Base.PkgId) at .loading.jl:1030
 [4] require(::Base.PkgId) at .loading.jl:928
 [5] require(::Module, ::Symbol) at .loading.jl:923
 [6] include(::Function, ::Module, ::String) at .Base.jl:380
 [7] include(::Module, ::String) at .Base.jl:368
 [8] top-level scope at none:2
 [9] eval at .boot.jl:331 [inlined]
 [10] eval(::Expr) at .client.jl:467
 [11] top-level scope at .none:3
in expression starting at C:UsersCarlos.juliapackagesPyPlotXHEG0srcPyPlo
t.jl:4
ERROR: Failed to precompile PyPlot [d330b81b-6aea-500a-939a-2ce795aea3ee] to C:
UsersCarlos.juliacompiledv1.5PyPlotoatAj_NvSXt.ji.
Stacktrace:
 [1] error(::String) at .error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at .loading.jl:1290
 [3] _require(::Base.PkgId) at .loading.jl:1030
 [4] require(::Base.PkgId) at .loading.jl:928
 [5] require(::Module, ::Symbol) at .loading.jl:923
 

Когда я использую Pkg.build("PyCall") , я получаю следующую ошибку:

 julia> Pkg.build("PyCall")
   Building Conda ─→ `C:UsersCarlos.juliapackagesCondax5ml4depsbuild.log
`
   Building PyCall → `C:UsersCarlos.juliapackagesPyCallBcTLpdepsbuild.lo
g`
┌ Error: Error building `PyCall`:
│ ┌ Info: Using the Python distribution in the Conda package by default.
│ └ To use a different Python version, set ENV["PYTHON"]="pythoncommand" and re-
run Pkg.build("PyCall").
│ [ Info: Downloading miniconda installer ...
│ ERROR: LoadError: failed process: Process(`'C:WindowsSystem32WindowsPowerSh
ellv1.0powershell.exe' -Version 3 -NoProfile -Command "[System.Net.ServicePoin
tManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; (New-Obj
ect System.Net.Webclient).DownloadFile('https://repo.continuum.io/miniconda/Mini
conda3-latest-Windows-x86_64.exe', 'C:UsersCarlos.juliaconda3installer.exe
')"`, ProcessExited(3221225477)) [3221225477]
│
│ Stacktrace:
│  [1] pipeline_error at .process.jl:525 [inlined]
│  [2] download_powershell(::String, ::String) at .download.jl:20
│  [3] download at .download.jl:64 [inlined]
│  [4] _install_conda(::String, ::Bool) at C:UsersCarlos.juliapackagesConda
x5ml4srcConda.jl:166
│  [5] _install_conda(::String) at C:UsersCarlos.juliapackagesCondax5ml4s
rcConda.jl:157
│  [6] runconda(::Cmd, ::String) at C:UsersCarlos.juliapackagesCondax5ml4
srcConda.jl:114
│  [7] add(::String, ::String; channel::String) at C:UsersCarlos.juliapackag
esCondax5ml4srcConda.jl:190
│  [8] add at C:UsersCarlos.juliapackagesCondax5ml4srcConda.jl:189 [inli
ned] (repeats 2 times)
│  [9] top-level scope at C:UsersCarlos.juliapackagesPyCallBcTLpdepsbuil
d.jl:84
│  [10] include(::String) at .client.jl:457
│  [11] top-level scope at none:5in expression starting at C:UsersCarlos.juliapackagesPyCallBcTLpdepsbu
ild.jl:43
└ @ Pkg.Operations D:buildbotworkerpackage_win64buildusrsharejuliastdlib
v1.5PkgsrcOperations.jl:942
 

Я пробовал несколько разных решений, которые я нашел на разных форумах, включая StackOverflow, но решения, похоже, не работают в моем конкретном случае. Кажется, это не имеет ничего общего с проблемами антивируса / брандмауэра.

Кроме того, проблема связана именно с PyCall, а не с PyPlot.

Кто-нибудь знает, что здесь делать?

Спасибо.

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

1. Что происходит, когда вы следуете первой рекомендации в сообщении об ошибке и запускаете Pkg.build("PyCall") ? (это также требуется using Pkg ).

2. @Przemyslaw Szufel Done. Я отредактировал свой вопрос с выводом Pkg.build("PyCall") , который также выдает ошибку.

Ответ №1:

Проблема на самом деле возникает в Conda.jl, который используется PyCall для установки дистрибутива Python. В частности, команде загрузки не удается получить установщик miniconda. Вы можете попробовать запустить

 C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Version 3 -NoProfile -Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; (New-Object System.Net.Webclient).DownloadFile('https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe', 'C:UsersCarlos.juliaconda3installer.exe')"
 

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

В качестве обходного пути вы можете самостоятельно установить Python Matplotlib (например, загрузить и установить Anaconda Python) и настроить PyCall на использование этого, а не устанавливать собственный дистрибутив Python.

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

1. Ошибка 3221225477 является ошибкой нарушения доступа. Следовательно, это означает, что powershell.exe давит очень некрасиво. Трудно сказать, что может помочь — может быть проблема с файловой системой, драйверами или, возможно, центр обновления Windows может помочь.

2. Может быть, у вас почему-то нет разрешения на запись C:UsersCarlos.juliaconda3 ?

3. Это может быть проблемой, потому что у Julia 1.5.3 есть ошибка с разрешениями в WIndows (в некоторых случаях вам нужно установить разрешения вручную). Однако, насколько я знаю, эта ошибка связана с ошибкой доступа к оперативной памяти.