Differences between revisions 1 and 141 (spanning 140 versions)
Revision 1 as of 2019-10-03 19:43:53
Size: 13446
Editor: TunayDurmaz
Comment: 1
Revision 141 as of 2023-10-07 23:01:01
Size: 15206
Editor: SteveLudtke
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from EMAN2/install/SourceInstall
## page was renamed from EMAN2/COMPILE_EMAN2_ANACONDA
## page was renamed from EMAN2/COMPILE_EMAN2_ANACONDA/2.9
## page was renamed from EMAN2/COMPILE_EMAN2_ANACONDA
## page was renamed from EMAN2/COMPILE_EMAN2_ANACONDA-DRAFT


{{{#!html
<h1 style="margin-bottom:5px;"> Building EMAN2/SPARX/SPHIRE from Source </h1>

<p style="font-size:110%; text-align:center; margin-top:5px; margin-left:20px; margin-right:20px;">
<i>
Standard instructions for establishing a build and runtime environment for EMAN/SPARX/SPHIRE on Linux, macOS and WSL2 (Windows):
</i>
</p>
}}}


 * 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 [[https://docs.conda.io/en/latest/|Conda]] for a working environment and most of the dependencies. [[https://www.anaconda.com/distribution/|Anaconda distribution]] has become ubiquitous for Python and R-based scientific computing and education over the last decade. While it may be possible to build the system without using Conda, 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 [[https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html|environment]] system in [[https://docs.conda.io/en/latest/|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 [[EMAN2/Install/BinaryInstallAnaconda/2.31#Using_the_GPU|GPU instructions]] from the binary installation page.
 * '''NOTE: Instructions Changed May 2023:''' In May 2023 we changed how the dependencies for EMAN2 were handled to allow for more flexible updating/changing of dependent packages without breaking the whole install. You may consider starting from scratch if your Anaconda setup predates May 2023.
Line 3: Line 32:
= Anaconda based Build, All Platforms (except Windows) =

EMAN2 source lives on !GitHub, downloading the source is part of the instructions below. Since EMAN2 uses Anaconda for its base environment, please follow the instructions below for a painless compile from source. If you go 'off script' you're on your own!

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 ==
For features which support the GPU, please complete the source install instructions below, then follow the [[EMAN2/Install/BinaryInstallAnaconda#GPU|GPU instructions]] from the binary installation page.

== Mac OS X, Linux ==
There are two approaches you can use for the installation. One uses 'Miniconda' and the other uses full 'Anaconda'. Miniconda is a much smaller (~30 MB) install, provides everything EMAN2 needs, and can be expanded with more packages as you like. Anaconda is a much more complete environment (~300 MB), including useful tools such as the Jupyter notebook. The installation instructions for Anaconda cover only the command line usage and not the GUI interface that comes with the Anaconda installation.

=== Linux Clusters ===
The approaches below will install EMAN2 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. If this happens please see the linux cluster installations on the [[EMAN2/Install/BinaryInstallAnaconda|binary install page]]. Those instructions should also work with either of the source-based installations below.


== Setup Development Environment with Conda ==
{{{#!wiki caution
'''TODO'''
 1. For difference between login- and non-login shells on Mac OSX, https://www.anintegratedworld.com/basics-of-osx-bashrc-v-profile-v-bash_profile/
 1. Review how to install new vs existing installations. How do you use conda-init, if conda is not on PATH?
  a. The installer seems to take care of it, if it is not used in batch mode.
  a. How do we handle it manually, if the installation was done in batch mode.
 1. Activation, conda init ... https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#activating-an-environment
}}}

 1. If you have an existing '''Miniconda2/Anaconda2''' installation,
  a. '''Remove miniconda/anaconda entries from PATH'''.
  a. If you want to make use of your cached packages, move your '''pkgs/''' and '''envs/''' folders out of your current installation to another location.
  {{{#!highlight bash
  mkdir -p <path-to-conda-cache-directory>
# mkdir -p ~/conda-global-cache

mv <path-to-current-miniconda2-installation>/pkgs <path-to-conda-cache-directory>
mv <path-to-current-miniconda2-installation>/envs <path-to-conda-cache-directory>
}}}
{{{#!wiki caution
'''???'''}}}
 1. '''???''' Make sure that you have added '''miniconda2/bin''' as the '''first element''' in your '''PATH''', and that you do not have '''LD_LIBRARY_PATH''' or '''PYTHONPATH''' (or '''PYTHONHOME''' for some very old python versions) set in your shell. If you need these settings for other software, you can still try to proceed, and hope they do not conflict with Miniconda. Alternatively, you may set up a shell script or alias to make these environment changes on demand when you want to use EMAN2/miniconda.
 1. Download '''Miniconda3''' for [[https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh|Linux]] or [[https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh|MacOSX]] or '''Anaconda3''' for ???links???. If you have installer related problems, the latest installers known to be working are ... and .....
{{{#!wiki caution
'''???'''}}}
 1. Install '''Miniconda3'''.
 {{{#!highlight bash
bash <Miniconda3-installer>
}}}
 and follow the prompts.
 1. Specify package and environment directories outside of the miniconda installation. These are the directories where conda environments and extracted packages will live. If you need to reinstall miniconda, you won't have to re-create your environments and re-download and re-extract all the packages. Reinstallation will only reset the '''base''' environment. First, create the cache directory, if it doesn't exist.
 {{{#!highlight bash
  mkdir -p <path-to-conda-cache-directory>
# mkdir -p ~/conda-global-cache

  conda config --add pkgs_dirs <path-to-conda-cache-directory>/pkgs
# conda config --add pkgs_dirs ~/conda-global-cache/pkgs

  conda config --add envs_dirs <path-to-conda-cache-directory>/envs
# conda config --add pkgs_dirs ~/conda-global-cache/envs
}}}
 1. Configure conda.
  a. Do not update conda automatically. '''(Strongly recommended)'''
  {{{#!highlight bash
== 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 [[#daily_build|Build and Install]].
 1. '''Check your account for possible problems'''
  * IF you have Anaconda installed in your account already, and wish to try setting up EMAN2 as a new environment skip ahead to [[#update_conda|Configure and update conda]]. This may or may not work without some effort, depending on the age of your Anaconda install.
  * Otherwise:
 {{{#!highlight bash
echo $PATH
# make sure no Anaconda/Miniconda/EMAN2 entries
echo $LD_LIBRARY_PATH
echo $PYTHONPATH
# ideally, both return nothing. If it set to something it is possible that it may interfere with Anaconda
# strongly suggest at least during the install, ''unset'' both of these. After installation you can test
# to see if they cause any issues
}}}

 <<Anchor(install_miniconda)>>
 1. '''Download and install''' '''Miniconda''': [[https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh|Linux]] or [[https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh|macOS (intel)]] or [[https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh|MacOS (ARM/M1/M2)]]

 {{{#!highlight bash
bash <Miniconda-installer>

# There are a variety of options you can use, but the default command above is sufficient in most cases
bash <Miniconda-installer> --help
}}}
 and follow the prompts. When you see ''Do you wish the installer to initialize Miniconda3 by running conda init?'', say ''no'', then move on to the next step.

 1. '''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:

 {{{#!highlight bash
# for bash-like shells, such as bash and zsh
source <miniconda-path>/etc/profile.d/conda.sh

# for csh-like shells, such as csh and tcsh:
source <miniconda-path>/etc/profile.d/conda.csh

# <shell-name> is bash, fish, powershell, tcsh, xonsh or zsh
conda init <shell-name>
}}}

 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 [[https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#activating-an-environment|Environment Activation]].

 {{{#!wiki caution
'''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/]].
}}}

<<Anchor(update_conda)>>
 1. '''Configure and update conda.'''
 {{{#!highlight bash
# We suggest the following, meaning you will need to use ''conda activate'' after logging in before using EMAN2
conda config --set auto_activate_base False

# Automatic conda updates may cause things to break, so we suggest making all package upgrades explicitly
Line 65: Line 89:
}}}
  a. If you don't want conda's base environment to be activated automatically. '''(Optional)'''
  {{{#!highlight bash
conda config --set auto_activate_base False
}}}
 1. Install '''conda 4.6.14'''.
 {{{#!highlight bash
conda install conda=4.6.14 -c defaults
}}}
 1. Initialize conda for shell interaction.
 {{{#!highlight bash
conda init bash

# See command help for supported shells
conda init --help
}}}



== Development Environments ==
{{{#!wiki caution
'''???'''}}}

Do not install anything into the '''base''' environment, do not use the '''base''' environment for development, use '''non-base''' environments.

 1. Create a new environment.
 {{{#!highlight bash
conda create -n eman-deps-14.1 eman-deps=14.1 -c cryoem -c defaults -c conda-forge
}}}
 OR choose a simpler name for the environment, '''eman-env''' or '''eman'''.
 {{{#!highlight bash
conda create -n eman-env eman-deps=14.1 -c cryoem -c defaults -c conda-forge
}}}
 1. Activate the environment.
 {{{#!highlight bash
conda activate eman-deps-14.1
}}}
 OR
 {{{#!highlight bash
conda activate eman-env
}}}
 1. Navigate to your source directory. Checkout a branch and pull updates from the remote.
 {{{#!highlight bash
cd <source-directory>
git checkout <branch>
git pull --rebase
}}}
 1. Navigate to your build directory, build and install.

# Install mamba (Not as necessary as it once was. Conda has improved. Mamba installation may be difficult now)
conda install mamba -c conda-forge

# Update base environment to get the latest conda
mamba update --all -n base

# Mac M1/M2/... users, if you get an error in the previous step see Troubleshooting below
}}}

 1. '''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.


 {{{#!highlight bash
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:

 {{{#!highlight bash
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-deps''' is built from, look [[https://github.com/cryoem/eman-deps-feedstock/blob/master/recipe/meta.yaml|here]]. Some of the dependency versions are listed in the appropriate file under [[https://github.com/cryoem/eman-deps-feedstock/tree/master/.ci_support|.ci_support]].

 {{{{#!wiki caution
'''macOS Big Sur Users'''

The new Big Sur macOS release (fall 2020) broke some things in Python, which are only now (Dec 2020) getting fixed. These fixes have not yet made their way into Anaconda. If you experience an error similar to "Unable to load OpenGL library", install a patched pyopengl package from cryoem channel (as of 1/13/2021).

{{{#!shell
conda install pyopengl -c cryoem
}}}

'''OR'''

This quick fix seems to provide a temporary solution until Anaconda gets the necessary updates:

You need to go into your miniconda3 or anaconda3 folder and find this file (the path may be slightly different on your install, but you should be able to find it):

''~/anaconda3/envs/eman2/lib/python3.7/site-packages/OpenGL/platform/ctypesloader.py''

Around line 80 you should find a line like:

'' fullName = util.find_library( name )''

change this line to:

'' fullName = '/System/Library/Frameworks/' + name + '.framework/' + name ''

(important to use 8 spaces before fullName, not a <tab>)

}}}}

 1. 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.

 1. '''Get EMAN code''' from [[https://github.com/cryoem/eman2|GitHub:cryoem/eman2]].
 {{{#!highlight bash
cd <path-where-you-want-eman2-source> # eg - $HOME/src
git clone https://github.com/cryoem/eman2.git # this will create an eman2 folder containing the current source code from the master branch
}}}

 1. '''Create a build directory''' (out-of-source builds are recommended).
 {{{#!highlight bash
mkdir <build-directory> # eg- $HOME/src/eman2-build
}}}

<<Anchor(daily_build)>>
== 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:

 1. '''Activate''' your environment. If you used a different name above, use it here too.
 {{{#!highlight bash
conda activate eman2
}}}

 1. '''Update and Checkout source code'''. Periodically you should update your source using standard git techniques.
 {{{#!highlight bash
cd <source-directory> # <path-where-you-want-eman2-source>/eman2
git fetch --all --prune # get remote branches and cleanup non-existing remote branches from local repo
git checkout master # to make sure you are building from the current master build rather than a branch someone is working on
git pull # This is what actually updates your local copy of the code
}}}

 1. '''CMake'''
Line 115: Line 179:
cmake <eman-source-directory>
make
# on Mac:
cmake <source-directory> # - eg $HOME/src/eman2, optionally add -DCMAKE_VERBOSE_MAKEFILE

# on Linux:
cmake <source-directory> -DENABLE_OPTIMIZE_MACHINE=ON # - eg $HOME/src/eman2, optionally add -DCMAKE_VERBOSE_MAKEFILE
}}}
  * '''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.

 1. '''Make'''
 {{{#!highlight bash
make -j 8
Line 118: Line 196:
}}}



== Current Development Environment ==
'''After [[https://github.com/cryoem/eman2/pull/407|PR: Upgrade CMake to 3.14]] is merged.'''

 1. Create a new environment, if it doesn't exist.
 {{{#!highlight bash
conda create -n eman-deps-15.1 eman-deps=15.1 cmake=3.14 -c cryoem -c defaults -c conda-forge
}}}

 1. Activate your environment.
 {{{#!highlight bash
conda activate eman-deps-15.1
}}}

 1. '''Get EMAN2 code if you don't have it''' from [[https://github.com/cryoem/eman2|GitHub:cryoem/eman2]].

# To install sphire
make install-sphire
}}}

 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.

 1. '''Other Environments'''. To switch to another conda environment (stop working with EMAN2), first deactivate your current environment.
 {{{#!highlight bash
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:
Line 137: Line 228:
cd <path-where-you-want-eman2-source> # eg - $HOME/src
git clone https://github.com/cryoem/eman2.git
# this will create an eman2 folder containing the current source code from the master branch
}}}

 1. '''Checkout branch'''. Navigate to your source directory. Checkout a branch and pull updates from the remote.
 {{{#!highlight bash
cd <source-directory>
git checkout master
git pull --rebase
}}}

 1. '''Create a build directory''' (out-of-source builds are recommended).
 {{{#!highlight bash
mkdir <build-directory> # eg- $HOME/src/eman2-build
cd <build-directory>
cmake <source-directory> # - eg $HOME/src/eman2. On linux, also add -DENABLE_OPTIMIZE_MACHINE=ON
}}}
{{{#!wiki caution
'''???'''}}}
  * '''???''' If conda is not found in PATH, set CONDA_PREFIX to your conda environment directory. It could be the main installation or an environment. This step most likely will be needed only if you use '''cmake-gui'''.
{{{#!wiki caution
'''???'''}}}
   * '''???''' If you set CONDA_PREFIX to an environment, make sure to delete any cmake variables that cmake already found, variables like *_LIBRARY or similar, *_INCLUDE_PATH or similar.
   * Rerun cmake.

 1. '''Build EMAN2'''
 {{{
/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.

<<Anchor(debug_and_report)>>
== 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. {{{#!highlight bash
script filename.txt

conda activate eman2

conda info -a
conda list
conda list --explicit

cd <source-dir>

git status
git log -1

cd <build-dir>

rm CMakeCache.txt
cmake <source-dir>
cmake . -LA

make clean
Line 167: Line 262:
}}}

 1. You may also wish to run
 {{{
make test # if everything passes you are fine, if there are failures, you are welcome to ask
make test-verbose # verbose test output to help to identify specific failures
}}}

 1. To switch to another conda environment, first deactivate your current environment.
 {{{#!highlight bash
make test-verbose
Line 178: Line 265:
}}}






=== Miniconda2 ===
 1. Download and install '''Miniconda2-4.4.10''' for [[https://repo.continuum.io/miniconda/Miniconda2-4.4.10-Linux-x86_64.sh|Linux]] or [[https://repo.continuum.io/miniconda/Miniconda2-4.4.10-MacOSX-x86_64.sh|Mac OSX]].

 1. Make sure that you have added '''miniconda2/bin''' as the '''first element''' in your '''PATH''', and that you do not have '''LD_LIBRARY_PATH''' or '''PYTHONPATH''' set in your shell. If you need these settings for other software, you can still try to proceed, and hope they do not conflict with Miniconda. Alternatively, you may set up a shell script or alias to make these environment changes on demand when you want to use EMAN2/miniconda.

 1. '''Install dependencies''', click [[https://github.com/cryoem/eman-deps-feedstock/blob/e8c31645c2e263efeeff232a7aa8a1e7eea65479/recipe/meta.yaml#L11-L42|here]] for conda dependencies
 {{{
conda install cmake=3.9 -c defaults
conda install eman-deps=14 -c cryoem -c defaults -c conda-forge
}}}

 1. '''Checkout EMAN2 code''' from [[https://github.com/cryoem/eman2|GitHub:cryoem/eman2]].
 {{{
cd <path-where-you-want-eman2-source> # eg - $HOME/src
git clone https://github.com/cryoem/eman2.git
# this will create an eman2 folder containing the current source code from the master branch
}}}

 1. '''Create a build directory''' (out-of-source builds are recommended).
 {{{
mkdir <build-directory> # eg- $HOME/src/eman2-build
cd <build-directory>
cmake <path-to-eman2-source> # - eg $HOME/src/eman2. On linux, also add -DENABLE_OPTIMIZE_MACHINE=ON
}}}
  * If conda is not found in PATH, set CONDA_PREFIX to your conda environment directory. It could be the main installation or an environment. This step most likely will be needed only if you use '''cmake-gui'''.
   * If you set CONDA_PREFIX to an environment, make sure to delete any cmake variables that cmake already found, variables like *_LIBRARY or similar, *_INCLUDE_PATH or similar.
   * Rerun cmake.

 1. '''Build EMAN2'''
 {{{
make -j
make install
}}}

 1. You may also wish to run
 {{{
make test # if everything passes you are fine, if there are failures, you are welcome to ask
make test-verbose # verbose test output to help to identify specific failures
}}}

=== Anaconda2 ===

 1. Download and install '''Anaconda2-5.1.0''' for [[https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86_64.sh|Linux]] or [[https://repo.continuum.io/archive/Anaconda2-5.1.0-MacOSX-x86_64.sh|Mac OSX]].
  1. For existing installations install conda 4.5.
  {{{
conda install "conda>=4.5.2" -c defaults
}}}

 1. Make sure that you have added '''anaconda2/bin''' as the '''first element''' in your '''PATH''', and that you do not have '''LD_LIBRARY_PATH''' or '''PYTHONPATH''' set in your shell. If you need these settings for other software, you can still try to proceed, and hope they do not conflict with Anaconda. Alternatively, you may set up a shell script or alias to make these environment changes on demand when you want to use EMAN2/anaconda.

 1. '''Install dependencies''', click [[https://github.com/cryoem/eman-deps-feedstock/blob/e8c31645c2e263efeeff232a7aa8a1e7eea65479/recipe/meta.yaml#L11-L42|here]] for conda dependencies
 {{{
conda create -n eman-env cmake=3.9 -c defaults
conda install -n eman-env eman-deps=14 -c cryoem -c defaults -c conda-forge

source activate eman-env
}}}

 1. Note that you will need to run {{{ source activate eman-env }}} once in each shell before being able to run EMAN2 commands.

 1. '''Checkout EMAN2 code''' from [[https://github.com/cryoem/eman2|GitHub:cryoem/eman2]].
 {{{
cd <path-where-you-want-eman2-source> # eg - $HOME/src
git clone https://github.com/cryoem/eman2.git
# this will create an eman2 folder containing the current source code from the master branch
}}}

 1. '''Create a build directory''' (out-of-source builds are recommended).
 {{{
mkdir <build-directory> # eg- $HOME/src/eman2-build
cd <build-directory>
cmake <path-to-eman2-source> # - eg $HOME/src/eman2. On linux, also add -DENABLE_OPTIMIZE_MACHINE=ON
}}}
  * If conda is not found in PATH, set CONDA_PREFIX to your conda environment directory. It could be the main installation or an environment. This step most likely will be needed only if you use '''cmake-gui'''.
   * If you set CONDA_PREFIX to an environment, make sure to delete any cmake variables that cmake already found, variables like *_LIBRARY or similar, *_INCLUDE_PATH or similar.
   * Rerun cmake.

 1. '''Build EMAN2'''
 {{{
make -j
make install
}}}

 1. You may also wish to run
 {{{
make test # if everything passes you are fine, if there are failures, you are welcome to ask
make test-verbose # verbose test output to help to identify specific failures
}}}

exit # or Ctrl+D
}}}

 1. 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.

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):

  • 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 for a working environment and most of the dependencies. Anaconda distribution has become ubiquitous for Python and R-based scientific computing and education over the last decade. While it may be possible to build the system without using Conda, 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.

  • NOTE: Instructions Changed May 2023: In May 2023 we changed how the dependencies for EMAN2 were handled to allow for more flexible updating/changing of dependent packages without breaking the whole install. You may consider starting from scratch if your Anaconda setup predates May 2023.

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.

  1. Check your account for possible problems

    • IF you have Anaconda 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 Anaconda install.

    • Otherwise:
       1 echo $PATH
       2 # make sure no Anaconda/Miniconda/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 
    

  2. Download and install Miniconda: Linux or macOS (intel) or MacOS (ARM/M1/M2)

       1 bash <Miniconda-installer>
       2 
       3 # There are a variety of options you can use, but the default command above is sufficient in most cases
       4 bash <Miniconda-installer> --help
    

    and follow the prompts. When you see Do you wish the installer to initialize Miniconda3 by running conda init?, say no, then move on to the next step.

  3. 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:

       1 # for bash-like shells, such as bash and zsh
       2 source <miniconda-path>/etc/profile.d/conda.sh
       3 
       4 # for csh-like shells, such as csh and tcsh:
       5 source <miniconda-path>/etc/profile.d/conda.csh
       6 
       7 # <shell-name> is bash, fish, powershell, tcsh, xonsh or zsh
       8 conda init <shell-name>
    

    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/.

  1. 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 # Install mamba (Not as necessary as it once was. Conda has improved. Mamba installation may be difficult now)
       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 
    
  2. 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-deps is built from, look here. Some of the dependency versions are listed in the appropriate file under .ci_support.

    macOS Big Sur Users

    The new Big Sur macOS release (fall 2020) broke some things in Python, which are only now (Dec 2020) getting fixed. These fixes have not yet made their way into Anaconda. If you experience an error similar to "Unable to load OpenGL library", install a patched pyopengl package from cryoem channel (as of 1/13/2021).

    conda install pyopengl -c cryoem

    OR

    This quick fix seems to provide a temporary solution until Anaconda gets the necessary updates:

    You need to go into your miniconda3 or anaconda3 folder and find this file (the path may be slightly different on your install, but you should be able to find it):

    ~/anaconda3/envs/eman2/lib/python3.7/site-packages/OpenGL/platform/ctypesloader.py

    Around line 80 you should find a line like:

    fullName = util.find_library( name )

    change this line to:

    fullName = '/System/Library/Frameworks/' + name + '.framework/' + name

    (important to use 8 spaces before fullName, not a <tab>)

  3. 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.

  4. Get EMAN code from GitHub:cryoem/eman2.

       1 cd <path-where-you-want-eman2-source>   # eg - $HOME/src
       2 git clone https://github.com/cryoem/eman2.git # this will create an eman2 folder containing the current source code from the master branch
       3 
    
  5. Create a build directory (out-of-source builds are recommended).

       1 mkdir <build-directory> # eg- $HOME/src/eman2-build
       2 
    

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:

  1. Activate your environment. If you used a different name above, use it here too.

       1 conda activate eman2
    
  2. 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 
    
  3. CMake

       1 cd <build-directory>
       2 # on Mac:
       3 cmake <source-directory>   # - eg $HOME/src/eman2, optionally add -DCMAKE_VERBOSE_MAKEFILE
       4 
       5 # on Linux:
       6 cmake <source-directory> -DENABLE_OPTIMIZE_MACHINE=ON  # - eg $HOME/src/eman2, optionally add -DCMAKE_VERBOSE_MAKEFILE
       7 
    
    • 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.

  4. Make

       1 make -j 8
       2 make install
       3 
       4 # To install sphire
       5 make install-sphire  
    

    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.    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 
    
  2. 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.

EMAN2/Install/SourceInstall (last edited 2023-10-10 03:25:26 by SteveLudtke)