Using PyPlot on MacOS

Apologies for being confused and not very constructive.

This issue was discussed on this forum before. I thought I had this fixed after updating conda. It was working. But then inadvertly I broke it again.

I am trying to add PyPlot as package. The precompile however fails.

(@v1.10) pkg> precompile
Precompiling project...
  ✗ PyPlot
  0 dependencies successfully precompiled in 1 seconds. 69 already precompiled.

ERROR: The following 1 direct dependency failed to precompile 

PyPlot [d330b81b-6aea-500a-939a-2ce795aea3ee]

Failed to precompile PyPlot [d330b81b-6aea-500a-939a-2ce795aea3ee] to "/Users/djplahaye/.julia/compiled/v1.10/PyPlot/jl_rmUvog".
ImportError: No module named sit

and status is

(@v1.10) pkg> st
Status `~/.julia/environments/v1.10/Project.toml`
  [c87230d0] FFMPEG v0.4.2 `https://github.com/JuliaIO/FFMPEG.jl#master`
  [7073ff75] IJulia v1.26.0
  [d330b81b] PyPlot v2.11.5

Help is much appreciated.

This indicates a broken Python environment. I’m guessing ENV["PYTHON"] is set to the name of a broken python?

If you make sure ENV["PYTHON"]="" when you build PyPlot/PyCall, it will install its own Conda distro which should work.

Apologies for being confused.

Here is output of ENV in the REPL

julia> ENV
Base.EnvDict with 31 entries:
  "TERM_PROGRAM"                 => "Apple_Terminal"
  "SHELL"                        => "/bin/zsh"
  "TERM"                         => "xterm-256color"
  "TMPDIR"                       => "/var/folders/01/8xpmjxp12q191smq8y_d32p0…
  "TERM_PROGRAM_VERSION"         => "440"
  "TERM_SESSION_ID"              => "6DBB1EDD-EC3A-4709-BD48-62E998E7BE3A"
  "USER"                         => "djplahaye"
  "SSH_AUTH_SOCK"                => "/private/tmp/com.apple.launchd.jYmmV99Uq…
  "PATH"                         => "/Users/djplahaye/.juliaup/bin:/opt/anaco…
  "__CFBundleIdentifier"         => "com.apple.Terminal"
  "PWD"                          => "/Users/djplahaye/.julia/packages/Harmoni…
  "XPC_FLAGS"                    => "0x0"
  "XPC_SERVICE_NAME"             => "0"
  "SHLVL"                        => "1"
  "HOME"                         => "/Users/djplahaye"
  "LOGNAME"                      => "djplahaye"
  "DISPLAY"                      => "/private/tmp/com.apple.launchd.7qyiQZt2w…
  "OLDPWD"                       => "/Users/djplahaye/.julia/packages/Harmoni…
  "CONDA_EXE"                    => "/opt/anaconda3/bin/conda"
  "_CE_M"                        => ""
  "_CE_CONDA"                    => ""
  "CONDA_PYTHON_EXE"             => "/opt/anaconda3/bin/python"
  "CONDA_SHLVL"                  => "1"
  "CONDA_PREFIX"                 => "/opt/anaconda3"
  "CONDA_DEFAULT_ENV"            => "base"
  "CONDA_PROMPT_MODIFIER"        => "(base) "
  "LC_CTYPE"                     => "UTF-8"
  "_"                            => "/Users/djplahaye/.juliaup/bin/julia"
  "__CF_USER_TEXT_ENCODING"      => "0x1F5:0x0:0x0"
  "OPENBLAS_MAIN_FREE"           => "1"
  "OPENBLAS_DEFAULT_NUM_THREADS" => "1"

What could I check from here on?

Thanks.

What happens if you do ENV["PYTHON"]="" followed by add PyCall and build PyCall at the pkg> prompt? If that works, does using PyCall then work?

Thanks!

I proceeded in three steps.

First, I made sure to have ENV[“PYTHON”]=“”

julia> ENV
Base.EnvDict with 32 entries:
  "TERM_PROGRAM"                 => "Apple_Terminal"
  "SHELL"                        => "/bin/zsh"
  "TERM"                         => "xterm-256color"
  "TMPDIR"                       => "/var/folders/01/8xpmjxp12q191smq8y_d32p0…
  "TERM_PROGRAM_VERSION"         => "440"
  "TERM_SESSION_ID"              => "6DBB1EDD-EC3A-4709-BD48-62E998E7BE3A"
  "USER"                         => "djplahaye"
  "SSH_AUTH_SOCK"                => "/private/tmp/com.apple.launchd.jYmmV99Uq…
  "PATH"                         => "/Users/djplahaye/.juliaup/bin:/opt/anaco…
  "__CFBundleIdentifier"         => "com.apple.Terminal"
  "PWD"                          => "/Users/djplahaye/.julia/packages/Harmoni…
  "XPC_FLAGS"                    => "0x0"
  "XPC_SERVICE_NAME"             => "0"
  "SHLVL"                        => "1"
  "HOME"                         => "/Users/djplahaye"
  "LOGNAME"                      => "djplahaye"
  "DISPLAY"                      => "/private/tmp/com.apple.launchd.7qyiQZt2w…
  "OLDPWD"                       => "/Users/djplahaye/.julia/packages/Harmoni…
  "CONDA_EXE"                    => "/opt/anaconda3/bin/conda"
  "_CE_M"                        => ""
  "_CE_CONDA"                    => ""
  "CONDA_PYTHON_EXE"             => "/opt/anaconda3/bin/python"
  "CONDA_SHLVL"                  => "1"
  "CONDA_PREFIX"                 => "/opt/anaconda3"
  "CONDA_DEFAULT_ENV"            => "base"
  "CONDA_PROMPT_MODIFIER"        => "(base) "
  "LC_CTYPE"                     => "UTF-8"
  "_"                            => "/Users/djplahaye/.juliaup/bin/julia"
  "__CF_USER_TEXT_ENCODING"      => "0x1F5:0x0:0x0"
  "OPENBLAS_MAIN_FREE"           => "1"
  "OPENBLAS_DEFAULT_NUM_THREADS" => "1"
  "PYTHON"                       => ""

Second, at the pkg> prompt, I added and build PyCall

(@v1.10) pkg> add PyCall 
   Resolving package versions...
    Updating `~/.julia/environments/v1.10/Project.toml`
  [438e738f] + PyCall v1.96.4
  No Changes to `~/.julia/environments/v1.10/Manifest.toml`

(@v1.10) pkg> build PyCall 
    Building Conda ─→ `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/b19db3927f0db4151cb86d073689f2428e524576/build.log`
    Building PyCall → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/9816a3826b0ebf49ab4926e2b18842ad8b5c8f04/build.log`
Precompiling project...
  1 dependency successfully precompiled in 5 seconds. 68 already precompiled. 1 skipped during auto due to previous errors.

At this stage, using Pycall in the REPL works

using PyCall 

Third, I repeated Step-2 above PyPlot

(@v1.10) pkg> add PyPlot 
   Resolving package versions...
  No Changes to `~/.julia/environments/v1.10/Project.toml`
  No Changes to `~/.julia/environments/v1.10/Manifest.toml`

(@v1.10) pkg> build PyPlot 
    Building Conda ─→ `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/b19db3927f0db4151cb86d073689f2428e524576/build.log`
    Building PyCall → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/9816a3826b0ebf49ab4926e2b18842ad8b5c8f04/build.log`

Interestingly, with this, using PyPlot in the REPL then results in output I had not seen before

julia> using PyPlot 
Precompiling PyPlot
  1 dependency successfully precompiled in 2 seconds. 17 already precompiled.
[ Info: Installing matplotlib via the Conda matplotlib package...
[ Info: Running `conda install -y matplotlib` in root environment
Channels:
 - defaults
Platform: osx-arm64
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /Users/djplahaye/.julia/conda/3

  added / updated specs:
    - matplotlib


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    brotli-1.0.9               |       h80987f9_8          20 KB
    brotli-bin-1.0.9           |       h80987f9_8          18 KB
    contourpy-1.3.1            |  py312h48ca7d4_0         264 KB
    cycler-0.11.0              |     pyhd3eb1b0_0          12 KB
    fonttools-4.51.0           |  py312h80987f9_0         2.8 MB
    freetype-2.12.1            |       h1192e45_0         570 KB
    jpeg-9e                    |       h80987f9_3         245 KB
    kiwisolver-1.4.4           |  py312h313beb8_0          54 KB
    lcms2-2.12                 |       hba8e193_0         273 KB
    lerc-3.0                   |       hc377ac9_0         115 KB
    libbrotlicommon-1.0.9      |       h80987f9_8          70 KB
    libbrotlidec-1.0.9         |       h80987f9_8          29 KB
    libbrotlienc-1.0.9         |       h80987f9_8         291 KB
    libdeflate-1.17            |       h80987f9_1          55 KB
    libpng-1.6.39              |       h80987f9_0         283 KB
    libtiff-4.5.1              |       h313beb8_0         496 KB
    libwebp-base-1.3.2         |       h80987f9_1         303 KB
    matplotlib-3.9.2           |  py312hca03da5_1           8 KB
    matplotlib-base-3.9.2      |  py312h7ef442a_1         7.8 MB
    openjpeg-2.5.2             |       h54b8e55_0         324 KB
    pillow-11.0.0              |  py312hfaf4e14_0         893 KB
    pyparsing-3.2.0            |  py312hca03da5_0         473 KB
    python-dateutil-2.9.0post0 |  py312hca03da5_2         320 KB
    six-1.16.0                 |     pyhd3eb1b0_1          18 KB
    tornado-6.4.1              |  py312h80987f9_0         866 KB
    unicodedata2-15.1.0        |  py312h80987f9_0         532 KB
    ------------------------------------------------------------
                                           Total:        17.0 MB

The following NEW packages will be INSTALLED:

  brotli             pkgs/main/osx-arm64::brotli-1.0.9-h80987f9_8 
  brotli-bin         pkgs/main/osx-arm64::brotli-bin-1.0.9-h80987f9_8 
  contourpy          pkgs/main/osx-arm64::contourpy-1.3.1-py312h48ca7d4_0 
  cycler             pkgs/main/noarch::cycler-0.11.0-pyhd3eb1b0_0 
  fonttools          pkgs/main/osx-arm64::fonttools-4.51.0-py312h80987f9_0 
  freetype           pkgs/main/osx-arm64::freetype-2.12.1-h1192e45_0 
  jpeg               pkgs/main/osx-arm64::jpeg-9e-h80987f9_3 
  kiwisolver         pkgs/main/osx-arm64::kiwisolver-1.4.4-py312h313beb8_0 
  lcms2              pkgs/main/osx-arm64::lcms2-2.12-hba8e193_0 
  lerc               pkgs/main/osx-arm64::lerc-3.0-hc377ac9_0 
  libbrotlicommon    pkgs/main/osx-arm64::libbrotlicommon-1.0.9-h80987f9_8 
  libbrotlidec       pkgs/main/osx-arm64::libbrotlidec-1.0.9-h80987f9_8 
  libbrotlienc       pkgs/main/osx-arm64::libbrotlienc-1.0.9-h80987f9_8 
  libdeflate         pkgs/main/osx-arm64::libdeflate-1.17-h80987f9_1 
  libpng             pkgs/main/osx-arm64::libpng-1.6.39-h80987f9_0 
  libtiff            pkgs/main/osx-arm64::libtiff-4.5.1-h313beb8_0 
  libwebp-base       pkgs/main/osx-arm64::libwebp-base-1.3.2-h80987f9_1 
  matplotlib         pkgs/main/osx-arm64::matplotlib-3.9.2-py312hca03da5_1 
  matplotlib-base    pkgs/main/osx-arm64::matplotlib-base-3.9.2-py312h7ef442a_1 
  openjpeg           pkgs/main/osx-arm64::openjpeg-2.5.2-h54b8e55_0 
  pillow             pkgs/main/osx-arm64::pillow-11.0.0-py312hfaf4e14_0 
  pyparsing          pkgs/main/osx-arm64::pyparsing-3.2.0-py312hca03da5_0 
  python-dateutil    pkgs/main/osx-arm64::python-dateutil-2.9.0post0-py312hca03da5_2 
  six                pkgs/main/noarch::six-1.16.0-pyhd3eb1b0_1 
  tornado            pkgs/main/osx-arm64::tornado-6.4.1-py312h80987f9_0 
  unicodedata2       pkgs/main/osx-arm64::unicodedata2-15.1.0-py312h80987f9_0 



Downloading and Extracting Packages:
                                                                              
Preparing transaction: done                                                   
Verifying transaction: done                                                   
Executing transaction: done                                                   
Fontconfig warning: ignoring UTF-8: not a valid region tag                    
Matplotlib is building the font cache; this may take a moment.

That happens the first time you load it — since it’s using it’s own Conda installation, the very first time you load PyPlot it installs Matplotlib.

Sounds like you had previously configured PyCall to use some other Python installation on your system, one that is currently broken. Glad it is working for you now.