Installation Issues Linking to Jupyter Lab

Hello,

I am seeking advice on the installation for FEnICSx using conda and linking the environment to jupyter lab. Before this process I updated conda to the latest version. The steps I took for the installation and link for the kernel are as follows:

  1. conda create -n fenics -c conda-forge python=3.8 jupyter fenics-dolfinx mpich pyvista
  2. conda activate fenics
  3. python -m ipykernel install --user --name fenics --display-name “Python fenics”
  4. jupyter lab

Once I open jupyter lab and begin a new notebook I tried the command:
from dolfinx import *

I also tried these two commands:
from mpi4py import MPI
from dolfinx import mesh

When I run these commands the kernel restarts as in the picture below.


I have tried to link jupyter lab and the fenics conda environment many times now using multiple methods and am unsure where to go from here to successfully use jupyter lab. Any advice or help is much appreciated!

Thank you!

Hello,

I wanted to follow-up with my question that I have the Macbook Pro with the M3 chip. I re-created a conda environment using this line:

conda create --override-channels -c conda-forge/osx-64 -c conda-forge/noarch -n fenicsx2 python=3.10 fenics-dolfinx mpich pyvista jupyterlab matplotlib pandas numpy

The jupyter lab link works successfully now, but the dolfinx package does not import. When I try to import dolfinx the kernel restarts. The other packages (basix, ffxc, ufl) are importing alright.

Thank you!

Maybe @minrk can comment, as he is the expert on conda, and has a Mac :slight_smile:

I’ll have a look tomorrow, but sharing the output of conda env export helps debug.

I’m pretty sure you can’t run osx-64 dolfinx on arm macs because rosetta doesn’t emulate avx, so you’ll get illegal instruction errors. You need to use the native osx-arm64 builds on an arm mac.

1 Like

Hello,

Thank you for the reply and I’ve placed the output of conda env export below:

name: base
channels:

  • anaconda
  • conda-forge
  • defaults
    dependencies:
  • _ipyw_jlab_nb_ext_conf=0.1.0=py38_0
  • alabaster=0.7.12=py_0
  • anaconda=2020.11=py38_0
  • anaconda-client=1.7.2=py38_0
  • anaconda-navigator=1.10.0=py38_0
  • anaconda-project=0.8.4=py_0
  • applaunchservices=0.2.1=py_0
  • appnope=0.1.0=py38_1001
  • appscript=1.1.1=py38haf1e3a3_0
  • argh=0.26.2=py38_0
  • argon2-cffi=20.1.0=py38haf1e3a3_1
  • asn1crypto=1.4.0=py_0
  • astroid=2.4.2=py38_0
  • astropy=4.0.2=py38haf1e3a3_0
  • async_generator=1.10=py_0
  • atomicwrites=1.4.0=py_0
  • attrs=20.3.0=pyhd3eb1b0_0
  • autopep8=1.5.4=py_0
  • babel=2.8.1=pyhd3eb1b0_0
  • backcall=0.2.0=py_0
  • backports=1.0=py_2
  • backports.functools_lru_cache=2.0.0=pyhd8ed1ab_0
  • backports.shutil_get_terminal_size=1.0.0=py38_2
  • backports.tempfile=1.0=py_0
  • backports.weakref=1.0.post1=pyhd8ed1ab_1003
  • beautifulsoup4=4.9.3=pyhb0f4dca_0
  • bitarray=1.6.1=py38h9ed2024_0
  • bkcharts=0.2=py38_0
  • blas=1.0=mkl
  • bleach=3.2.1=py_0
  • blosc=1.20.1=hab81aa3_0
  • bokeh=2.2.3=py38_0
  • boto=2.49.0=py38_0
  • bottleneck=1.3.2=py38hf1fa96c_1
  • brotlipy=0.7.0=py38haf1e3a3_1000
  • bzip2=1.0.8=h1de35cc_0
  • ca-certificates=2020.10.14=0
  • certifi=2020.6.20=pyhd3eb1b0_3
  • cffi=1.14.3=py38hed5b41f_0
  • chardet=3.0.4=py38_1003
  • click=7.1.2=py_0
  • cloudpickle=1.6.0=py_0
  • clyent=1.2.2=py38_1
  • colorama=0.4.4=py_0
  • conda=4.14.0=py38h50d1736_0
  • conda-build=3.20.5=py38_1
  • conda-env=2.6.0=1
  • conda-package-handling=1.9.0=py38hef030d1_1
  • conda-verify=3.4.2=py_1
  • contextlib2=0.6.0.post1=py_0
  • cryptography=3.1.1=py38hddc9c9b_0
  • curl=7.71.1=hb0a8c7a_1
  • cycler=0.10.0=py38_0
  • cython=0.29.21=py38hb1e8313_0
  • cytoolz=0.11.0=py38haf1e3a3_0
  • dask=2.30.0=py_0
  • dask-core=2.30.0=py_0
  • dbus=1.13.18=h18a8e69_0
  • decorator=4.4.2=py_0
  • defusedxml=0.6.0=py_0
  • diff-match-patch=20200713=py_0
  • distributed=2.30.1=py38hecd8cb5_0
  • docutils=0.16=py38_1
  • entrypoints=0.3=py38_0
  • et_xmlfile=1.0.1=py_1001
  • expat=2.2.10=hb1e8313_2
  • fastcache=1.1.0=py38h1de35cc_0
  • filelock=3.0.12=py_0
  • flake8=3.8.4=py_0
  • flask=1.1.2=py_0
  • freetype=2.10.4=ha233b18_0
  • fsspec=0.8.3=py_0
  • future=0.18.2=py38_1
  • get_terminal_size=1.0.0=h7520d66_0
  • gettext=0.19.8.1=hb0f4f8b_2
  • gevent=20.9.0=py38haf1e3a3_0
  • glib=2.66.1=h9bbe63b_0
  • glob2=0.7=py_0
  • gmp=6.1.2=hb37e062_1
  • gmpy2=2.0.8=py38h6ef4df4_3
  • greenlet=0.4.17=py38haf1e3a3_0
  • h5py=2.10.0=py38h3134771_0
  • hdf5=1.10.4=hfa1e0ec_0
  • heapdict=1.0.1=py_0
  • html5lib=1.1=py_0
  • icu=58.2=h0a44026_3
  • idna=2.10=py_0
  • imageio=2.9.0=py_0
  • imagesize=1.2.0=py_0
  • importlib-metadata=2.0.0=py_1
  • importlib_metadata=2.0.0=1
  • iniconfig=1.1.1=py_0
  • intel-openmp=2019.4=233
  • intervaltree=3.1.0=py_0
  • ipykernel=5.3.4=py38h5ca1d4c_0
  • ipython=7.19.0=py38h01d92e1_0
  • ipython_genutils=0.2.0=py38_0
  • ipywidgets=7.5.1=py_1
  • isort=5.6.4=py_0
  • itsdangerous=1.1.0=py_0
  • jbig=2.1=h4d881f8_0
  • jdcal=1.4.1=py_0
  • jedi=0.17.1=py38_0
  • jinja2=2.11.2=py_0
  • joblib=0.17.0=py_0
  • jpeg=9b=he5867d9_2
  • json5=0.9.5=py_0
  • jsonschema=3.2.0=py_2
  • jupyter=1.0.0=py38_7
  • jupyter_client=6.1.7=py_0
  • jupyter_console=6.2.0=py_0
  • jupyter_core=4.6.3=py38_0
  • jupyterlab=2.2.6=py_0
  • jupyterlab_pygments=0.1.2=py_0
  • jupyterlab_server=1.2.0=py_0
  • keyring=21.4.0=py38_1
  • kiwisolver=1.3.0=py38h23ab428_0
  • krb5=1.18.2=h75d18d8_0
  • lazy-object-proxy=1.4.3=py38h1de35cc_0
  • lcms2=2.11=h92f6f08_0
  • libarchive=3.4.2=haa3ed63_0
  • libcurl=7.71.1=h8a08a2b_1
  • libcxx=10.0.0=1
  • libedit=3.1.20191231=h1de35cc_1
  • libffi=3.3=hb1e8313_2
  • libgfortran=3.0.1=h93005f0_2
  • libiconv=1.16=h1de35cc_0
  • liblief=0.10.1=h0a44026_0
  • libllvm10=10.0.1=h76017ad_5
  • libpng=1.6.37=ha441bb4_0
  • libsodium=1.0.18=h1de35cc_0
  • libspatialindex=1.9.3=h0a44026_0
  • libssh2=1.9.0=ha12b0ac_1
  • libtiff=4.1.0=hcb84e12_1
  • libxml2=2.9.10=h7cdb67c_3
  • libxslt=1.1.34=h83b36ba_0
  • llvm-openmp=10.0.0=h28b9765_0
  • llvmlite=0.34.0=py38h739e7dc_4
  • locket=0.2.0=py38_1
  • lxml=4.6.1=py38h63b7cb6_0
  • lz4-c=1.9.2=h79c402e_3
  • lzo=2.10=haf1e3a3_2
  • markupsafe=1.1.1=py38h1de35cc_1
  • matplotlib=3.3.2=0
  • matplotlib-base=3.3.2=py38h181983e_0
  • mccabe=0.6.1=py38_1
  • mistune=0.8.4=py38h1de35cc_1001
  • mkl=2019.4=233
  • mkl-service=2.3.0=py38hfbe908c_0
  • mkl_fft=1.2.0=py38hc64f4ea_0
  • mkl_random=1.1.1=py38h959d312_0
  • mock=4.0.2=py_0
  • more-itertools=8.6.0=pyhd3eb1b0_0
  • mpc=1.1.0=h6ef4df4_1
  • mpfr=4.0.2=h9066e36_1
  • mpmath=1.1.0=py38_0
  • msgpack-python=1.0.0=py38h04f5b5a_1
  • multipledispatch=0.6.0=py38_0
  • navigator-updater=0.2.1=py38_0
  • nbclient=0.5.1=py_0
  • nbconvert=6.0.7=py38_0
  • nbformat=5.0.8=py_0
  • ncurses=6.2=h0a44026_1
  • nest-asyncio=1.4.2=pyhd3eb1b0_0
  • networkx=2.5=py_0
  • nltk=3.5=py_0
  • nose=1.3.7=py38_1004
  • notebook=6.1.4=py38_0
  • numba=0.51.2=py38h6440ff4_1
  • numexpr=2.7.1=py38hce01a72_0
  • numpy=1.19.2=py38h456fd55_0
  • numpy-base=1.19.2=py38hcfb5961_0
  • numpydoc=1.1.0=pyhd3eb1b0_1
  • olefile=0.46=py_0
  • openpyxl=3.0.5=py_0
  • openssl=1.1.1h=haf1e3a3_0
  • packaging=20.4=py_0
  • pandas=1.1.3=py38hb1e8313_0
  • pandoc=2.11=h0dc7051_0
  • pandocfilters=1.4.3=py38hecd8cb5_1
  • parso=0.7.0=py_0
  • partd=1.1.0=py_0
  • path=15.0.0=py38_0
  • path.py=12.5.0=0
  • pathlib2=2.3.5=py38_1
  • pathtools=0.1.2=py_1
  • patsy=0.5.1=py38_0
  • pcre=8.44=hb1e8313_0
  • pep8=1.7.1=py38_0
  • pexpect=4.8.0=py38_1
  • pickleshare=0.7.5=py38_1001
  • pillow=8.0.1=py38h5270095_0
  • pip=20.2.4=py38hecd8cb5_0
  • pkginfo=1.6.1=py38hecd8cb5_0
  • pluggy=0.13.1=py38_0
  • ply=3.11=py38_0
  • prometheus_client=0.8.0=py_0
  • prompt-toolkit=3.0.8=py_0
  • prompt_toolkit=3.0.8=0
  • psutil=5.7.2=py38haf1e3a3_0
  • ptyprocess=0.6.0=py38_0
  • py=1.9.0=py_0
  • py-lief=0.10.1=py38haf313ee_0
  • pycodestyle=2.6.0=py_0
  • pycosat=0.6.3=py38h1de35cc_1
  • pycparser=2.20=py_2
  • pycurl=7.43.0.6=py38hddc9c9b_0
  • pydocstyle=5.1.1=py_0
  • pyflakes=2.2.0=py_0
  • pygments=2.7.2=pyhd3eb1b0_0
  • pylint=2.6.0=py38_0
  • pyodbc=4.0.30=py38h0a44026_0
  • pyopenssl=19.1.0=py_1
  • pyparsing=2.4.7=py_0
  • pyqt=5.9.2=py38h655552a_2
  • pyrsistent=0.17.3=py38haf1e3a3_0
  • pysocks=1.7.1=py38_1
  • pytables=3.6.1=py38h4727e94_0
  • pytest=6.1.1=py38_0
  • python=3.8.5=h26836e1_1
  • python-dateutil=2.8.1=py_0
  • python-jsonrpc-server=0.4.0=py_0
  • python-language-server=0.35.1=py_0
  • python-libarchive-c=2.9=py_0
  • python.app=2=py38_10
  • python_abi=3.8=2_cp38
  • pytz=2020.1=py_0
  • pywavelets=1.1.1=py38haf1e3a3_2
  • pyyaml=5.3.1=py38haf1e3a3_1
  • pyzmq=19.0.2=py38hb1e8313_1
  • qdarkstyle=2.8.1=py_0
  • qt=5.9.7=h468cd18_1
  • qtawesome=1.0.1=py_0
  • qtconsole=4.7.7=py_0
  • qtpy=1.9.0=py_0
  • readline=8.0=h1de35cc_0
  • regex=2020.10.15=py38haf1e3a3_0
  • requests=2.24.0=py_0
  • ripgrep=12.1.1=0
  • rope=0.18.0=py_0
  • rtree=0.9.4=py38_1
  • ruamel_yaml=0.15.87=py38haf1e3a3_1
  • scikit-image=0.17.2=py38h81aa140_0
  • scikit-learn=0.23.2=py38h959d312_0
  • scipy=1.5.2=py38h2515648_0
  • seaborn=0.11.0=py_0
  • send2trash=1.5.0=py38_0
  • setuptools=50.3.1=py38hecd8cb5_1
  • simplegeneric=0.8.1=py38_2
  • singledispatch=3.4.0.3=py_1001
  • sip=4.19.8=py38h0a44026_0
  • six=1.15.0=py38hecd8cb5_0
  • snowballstemmer=2.0.0=py_0
  • sortedcollections=1.2.1=py_0
  • sortedcontainers=2.2.2=py_0
  • soupsieve=2.0.1=py_0
  • sphinx=3.2.1=py_0
  • sphinxcontrib=1.0=py38_1
  • sphinxcontrib-applehelp=1.0.2=py_0
  • sphinxcontrib-devhelp=1.0.2=py_0
  • sphinxcontrib-htmlhelp=1.0.3=py_0
  • sphinxcontrib-jsmath=1.0.1=py_0
  • sphinxcontrib-qthelp=1.0.3=py_0
  • sphinxcontrib-serializinghtml=1.1.4=py_0
  • sphinxcontrib-websupport=1.2.4=py_0
  • spyder=4.1.5=py38_0
  • spyder-kernels=1.9.4=py38_0
  • sqlalchemy=1.3.20=py38h9ed2024_0
  • sqlite=3.33.0=hffcf06c_0
  • statsmodels=0.12.0=py38haf1e3a3_0
  • sympy=1.6.2=py38hecd8cb5_1
  • tblib=1.7.0=py_0
  • terminado=0.9.1=py38_0
  • testpath=0.4.4=py_0
  • threadpoolctl=2.1.0=pyh5ca1d4c_0
  • tifffile=2020.10.1=py38h0cf3a3e_2
  • tk=8.6.10=hb0a8c7a_0
  • toml=0.10.1=py_0
  • toolz=0.11.1=py_0
  • tornado=6.0.4=py38h1de35cc_1
  • tqdm=4.50.2=py_0
  • traitlets=5.0.5=py_0
  • typing_extensions=3.7.4.3=py_0
  • ujson=4.0.1=py38hb1e8313_0
  • unicodecsv=0.14.1=py38_0
  • unixodbc=2.3.9=haf1e3a3_0
  • urllib3=1.25.11=py_0
  • watchdog=0.10.3=py38haf1e3a3_0
  • wcwidth=0.2.5=py_0
  • webencodings=0.5.1=py38_1
  • werkzeug=1.0.1=py_0
  • wheel=0.35.1=py_0
  • widgetsnbextension=3.5.1=py38_0
  • wrapt=1.11.2=py38h1de35cc_0
  • wurlitzer=2.0.1=py38_0
  • xlrd=1.2.0=py_0
  • xlsxwriter=1.3.7=py_0
  • xlwings=0.20.8=py38_0
  • xlwt=1.3.0=py38_0
  • xmltodict=0.13.0=pyhd8ed1ab_0
  • xz=5.2.5=h1de35cc_0
  • yaml=0.2.5=haf1e3a3_0
  • yapf=0.30.0=py_0
  • zeromq=4.3.3=hb1e8313_3
  • zict=2.0.0=py_0
  • zipp=3.4.0=pyhd3eb1b0_0
  • zlib=1.2.11=h1de35cc_3
  • zope=1.0=py38_1
  • zope.event=4.5.0=py38_0
  • zope.interface=5.1.2=py38haf1e3a3_0
  • zstd=1.4.5=h41d2c2f_0
  • pip:
    • h5json==1.1.3
    • lib6003==0.0.4
    • pyaudio==0.2.11
    • pyfehm==1.0.4
      prefix: /Users//anaconda3

I am not familiar with the difference between installing conda modules using a native osx-arm64 build and the rosetta. Perhaps you may elaborate on this so I can learn for current and future fenics builds.

Thank you and I appreciate you taking a look at the issue tomorrow!

Sorry, ‘tomorrow’ got away from me.

conda info

will tell you about your conda installation. In particular, the platform field is relevant here, which tells you the os and architecture your packages are compiled for. If you are on an ARM mac, the platform should probably be osx-arm64, but I’m pretty sure yours is osx-64, which means your packages are compiled for an Intel mac. If that’s the case, you should probably get the macOS arm64 installer here and start fresh.

ARM macs can (mostly) emulate x86_64. That’s why your osx-64 installation mostly works. However, they don’t emulate the full extended instruction set, and one or more fenics dependencies use AVX on Intel chips, which fails under emulation on ARM (aside: I think this changed somewhat recently, I haven’t had a chance to track it down and determine if it should be the case).

You can pick the different channels on a per-environment basis, but that’s tricky and prone to error if you install packages more than once. To create an osx-arm64 dolfinx env on an osx-64 conda installation:

conda create -n fenics --override-channels -c conda-forge/noarch -c conda-forge/osx-arm64  jupyterlab fenics-dolfinx mpich pyvista

This is almost the install command you had, but trading osx-64 for osx-arm64. If you install the arm64 miniforge, these will be the default channels, and you won’t need to specify any channels to get these in the future.

I hope that helps!

1 Like