Building EMAN2/SPARX/SPHIRE from Source
Standard instructions for establishing a build and runtime environment for EMAN/SPARX/SPHIRE on Linux, macOS and WSL2 (Windows):
WARNING FOR EXISTING USERS - If your last source build was before 8/21/24, on that date we updated the eman-dev conda-forge dependencies to use Python 3.12. This Python version has some backwards incompatibility, and using it requires setting up a fresh EMAN2 environment, or you will get a variety of errors. If you are in this situation:
- remove your current EMAN2 build folder (not the source, just the folder where you run make from)
- conda env remove -n eman2 (remove your existing EMAN2 environment)
- Follow the instructions below starting with "Make a new Environment"
While the instructions look long, in reality it should only take 10-15 minutes to complete the entire process (with a decent network connection).
We use conda-forge for a working environment and most of the dependencies. While it may be possible to build the system without using conda-forge, we do not recommend doing this, and cannot provide support for a non-conda approach. If you follow the instructions below, you should have a painless source build very quickly.
We make use of the environment system in conda, the package manager, to isolate EMAN2 dependencies from other conda packages you may have installed. If you need to install other packages you wish to use in concert with EMAN2, you will need to install them within the EMAN2 environment. Be warned that sometimes installing another package may trigger a version change in one of EMAN2's dependencies, which may or may not be a problem, depending on which dependency it is. We strongly suggest getting the base EMAN2 installed and working first, before trying to install any additional packages within the same conda environment.
- Note that even with a source build it may be difficult to get this working on systems with very old operating system installs. We normally try to support OS versions as much as 5-7 years old. Please report any problems.
GPU Support (Linux Only!): For features which support the GPU, please complete the standard source install instructions below, then follow the GPU instructions from the binary installation page.
Contents
Initial Setup
This section only needs to be completed once. If you have a working EMAN2 source installation and just wish to update, skip ahead to Build and Install.
Check your account for possible problems
IF you have conda-forge (or Anaconda if you meet the licensing requirements) installed in your account already, and wish to try setting up EMAN2 as a new environment skip ahead to Configure and update conda. This may or may not work without some effort, depending on the age of your install.
- Otherwise:
1 echo $PATH 2 # make sure no Anaconda/Miniconda/old EMAN2 entries 3 echo $LD_LIBRARY_PATH 4 echo $PYTHONPATH 5 # ideally, both return nothing. If it set to something it is possible that it may interfere with Anaconda 6 # strongly suggest at least during the install, ''unset'' both of these. After installation you can test 7 # to see if they cause any issues 8
Download and install MiniForge: Installers (for your platform)
- If your site has an Anaconda license, you are welcome to use the conda provided by a proper Anaconda/MiniConda installation. Using mini-forge, which provides 'conda' and 'mamba' command line tools is (at the time of writing) completely open-source. All EMAN2 dependencies are provided by conda-forge and make no use of the Anaconda mainline repository, so require no licensing agreement (as far as we can determine).
and follow the prompts. When you see Do you wish to update your shell profile to automatically initialize conda?, say no, then move on to the next step.
Initialize conda for shell interaction. These instructions will depend on what shell you use. The default on most systems is bash. If you use a different shell ( tsch, zsh, ... ), you will need to take that into account:
As it says after you run this command, you will need to close and reopen your shell/terminal for it to take effect. This command modified your shell initialization so the conda activate command can be used properly. For more information on conda-init and activation, see Environment Activation.
macOS Users (bash only)
On macOS, this modifies ~/.bash_profile. If you have a ~/.profile startup file, creation of ~/.bash_profile will prevent ~/.profile from being read. A simple solution is to source .profile within .bash_profile.
For differences between login- and non-login shells and order of reading the startup files on macOS, see, https://www.anintegratedworld.com/basics-of-osx-bashrc-v-profile-v-bash_profile/.
Configure and update conda.
1 # We suggest the following, meaning you will need to use ''conda activate'' after logging in before using EMAN2 2 conda config --set auto_activate_base False 3 4 # Automatic conda updates may cause things to break, so we suggest making all package upgrades explicitly 5 conda config --set auto_update_conda False 6 7 # If you have Anaconda, not miniforge, you may need to install mamba separately. If you used miniforge as described above, you should already have '''mamba''' 8 conda install mamba -c conda-forge 9 10 # Update base environment to get the latest conda 11 mamba update --all -n base 12 13 # Mac M1/M2/... users, if you get an error in the previous step see Troubleshooting below 14
Create a new environment with EMAN2 dependencies. eman2 below is the name of the environment. You may make this whatever you like, as long as you remember to use the same name when doing conda activate. Note that this name will appear as part of your prompt when activated, so you may want to keep it short.
1 mamba create -n eman2 eman-dev --only-deps -c cryoem -c conda-forge
To get the non-GUI variant which will not have pyqt and pyopengl, and can be installed on machines that do not provide GUI support and do not have any OpenGL packages installed, run one of the commands below:
1 mamba create -n eman2 'eman-dev=*=nogui_*' --only-deps -c cryoem -c conda-forge
List of dependencies: If you wish to see the list of conda dependencies that eman-dev is built from, look here. Some of the dependency versions are listed in the appropriate file under .ci_support.
Ensure you have OpenGL:
EMAN2 uses OpenGL (via PyQt) for all of its graphics. OpenGL installation depends on OS variant and, for example, whether you are using proprietary NVidia drivers under Linux. You will need to have OpenGL set up on your machine as a whole before continuing. On Mac, you should already have this with XCode. On Linux with an NVidia driver you will likely also need to install the Mesa header files. If you aren't sure how to set up OpenGL, Google can probably help.
Get EMAN code from GitHub:cryoem/eman2.
Create a build directory (out-of-source builds are recommended).
Build and Install: Daily development, Update code, etc.
When you start a new shell, these are the steps you will need to take before running EMAN programs or compiling the system:
Activate your environment. If you used a different name above, use it here too.
1 conda activate eman2
Update and Checkout source code. Periodically you should update your source using standard git techniques.
1 cd <source-directory> # <path-where-you-want-eman2-source>/eman2 2 git fetch --all --prune # get remote branches and cleanup non-existing remote branches from local repo 3 git checkout master # to make sure you are building from the current master build rather than a branch someone is working on 4 git pull # This is what actually updates your local copy of the code 5
CMake
cmake-gui
If you use cmake-gui, since conda is not in PATH anymore, cmake will fail to find the environment directory. In that case set CONDA_PREFIX to your conda environment directory manually.
- Make sure to delete any cmake variables that cmake already found, variables like *_LIBRARY or similar, *_INCLUDE_PATH or similar, CONDA_EXECUTABLE, CMAKE_INSTALL_PREFIX and any variables that are expected to contain conda environment related values.
- Configure and generate.
ccmake
If you use ccmake, you may get an error related to OpenGL. If this happens try quitting ccmake and running it again.
Make
Note that the make -j 8 above will compile using 8 threads. On some machines omitting the 8 will compile faster and cause no problems, and if you have more than 8 threads on your machine, you can increase the number.
Test install
- e2version.py
- e2speedtest.py
- e2display.py (not for clusters without GUI environments configured)
- note: "make test" is not recommended for individual installs, this tool is primarily aimed at developers making changes in the core of the system. It is not uncommon for one or more tests to fail, and there is no need to report such failures. In most cases this is a problem with the test, not a problem with the system.
Other Environments. To switch to another conda environment (stop working with EMAN2), first deactivate your current environment.
1 conda deactivate
Troubleshooting
Solutions to potential known problems will be listed here. If these don't help, please report your problem (http://groups.google.com/group/eman2):
- While ARM Macs (M1/M2/...) are improving, there can still be problems (2023)
If running mamba produces an error related to libarchive.13.dylib, there are 3 different things you can try:
Forget mamba, try micromamba instead (conda install micromamba. The only confusing issue with micromamba is that it puts the environment files in a different place, so conda activate eman2 won't work, and you have to do micromamba activate eman2
- - or -
In some cases, this will fix Mamba: ln -s $HOME/miniconda3/lib/libarchive.dylib $HOME/miniconda3/lib/libarchive.13.dylib
- - or -
If that doesn't fix mamba and you have HomeBrew on your machine, you can:
brew install libarchive
ln -s /opt/homebrew/opt/libarchive/lib/libarchive.13.dylib $HOME/miniconda3/lib
- If using a newer C compiler on Linux, you may encounter an error like:
/home/steve/miniconda3/envs/eman2/lib/libstdc++.so.6: version `GLIBCXX_3.4.29' not found
Simply removing the offending libstdc++.so file will normally resolve this issue. - Compilers on CentOS 6 and 7, do not support gcc's dual ABI feature which is needed to compile EMAN2's modern C++ code. On our build machine, devtools-7 and devtools-11 have been tested and confirmed to fail to compile EMAN2 code.
Reporting Problems
Please, provide the output of the following commands when reporting a problem. Record the session via script command. This, also, records the commands.
1 script filename.txt 2 3 conda activate eman2 4 5 conda info -a 6 conda list 7 conda list --explicit 8 9 cd <source-dir> 10 11 git status 12 git log -1 13 14 cd <build-dir> 15 16 rm CMakeCache.txt 17 cmake <source-dir> 18 cmake . -LA 19 20 make clean 21 make -j 22 make install 23 make test-verbose 24 25 conda deactivate 26 27 exit # or Ctrl+D 28
Send filename.txt.
Linux Clusters
The approach above will install EMAN with a precompiled version of OpenMPI, which may or may not work with the batch queuing system on your cluster. If it does not work, the symptom will be that MPI parallel jobs will use only a single node, no matter how many you have allocated in your job. Currently, we do not have alternative OpenMPI installation instructions.