Moshpit 2026.1: cannot fetch eggnog database

Please read the following before posting!

This is related to installation errors in diamond database and eggnog database

But now we have the same problem in Moshpit version 2026.1, annotate fetch-eggnog-db

The plugin wants to download http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.taxa.tar.gz but in reality this file is here: http://eggnog5.embl.de/download/emapperdb-5.0.2/eggnog.db.gz

Command and output:

mosh annotate fetch-eggnog-db \
    --o-db eggnog_db.qza \
    --verbose

Output:

  import pkg_resources
Running external command line application(s). This may print messages to stdout and/or stderr.
The command(s) being run are below. These commands cannot be manually re-run as they will depend on temporary files that no longer exist.

Command: download_eggnog_data.py -y -D --data_dir /tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5

Downloading "eggnog.db" at /tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5...
cd /tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5 && wget -nH --user-agent=Mozilla/5.0 --relative --no-parent --reject "index.html*" --cut-dirs=4 -e robots=off -O eggnog.db.gz http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.db.gz && echo Decompressing... && gunzip eggnog.db.gz 
--2026-03-31 22:17:25--  http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.db.gz
Resolving eggnogdb.embl.de (eggnogdb.embl.de)... 194.94.44.170
Connecting to eggnogdb.embl.de (eggnogdb.embl.de)|194.94.44.170|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2026-03-31 22:17:25 ERROR 404: Not Found.

Downloading "eggnog.taxa.db" at /tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5...
cd /tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5 && wget -nH --user-agent=Mozilla/5.0 --relative --no-parent --reject "index.html*" --cut-dirs=4 -e robots=off -O eggnog.taxa.tar.gz http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.taxa.tar.gz && echo Decompressing... && tar -zxf eggnog.taxa.tar.gz && rm eggnog.taxa.tar.gz
--2026-03-31 22:17:25--  http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.taxa.tar.gz
Resolving eggnogdb.embl.de (eggnogdb.embl.de)... 194.94.44.170
Connecting to eggnogdb.embl.de (eggnogdb.embl.de)|194.94.44.170|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2026-03-31 22:17:25 ERROR 404: Not Found.

Skipping diamond database (or already present). Use -f to force download
Skipping novel families diamond and annotation databases (or already present). Use -F and -f to force download
Skipping Pfam database (or already present). Use -P and -f to force download
Skipping MMseqs2 database (or already present). Use -M and -f to force download
No HMMER database requested. Use "-H -d taxid" to download the hmmer database for taxid
Finished.
Traceback (most recent call last):
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/q2cli/commands.py", line 573, in __call__
    results = self._execute_action(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/q2cli/commands.py", line 645, in _execute_action
    results = action(**arguments)
  File "<decorator-gen-1007>", line 2, in fetch_eggnog_db
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/action.py", line 307, in bound_callable
    outputs = self._callable_executor_(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/action.py", line 513, in _callable_executor_
    self.signature.coerce_given_outputs(output_views, output_types,
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/type/signature.py", line 509, in coerce_given_outputs
    output = self._create_output_artifact(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/type/signature.py", line 531, in _create_output_artifact
    artifact = rachis.sdk.Artifact._from_view(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/result.py", line 704, in _from_view
    result = transformation(view, validate_level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/transform.py", line 68, in transformation
    self.validate(view, level=validate_level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/transform.py", line 143, in validate
    view.validate(level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/plugin/model/directory_format.py", line 183, in validate
    raise ValidationError("Unrecognized file (%s) for %s."
rachis.core.exceptions.ValidationError: Unrecognized file (/tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5/eggnog.taxa.tar.gz) for EggnogRefDirFmt.

Plugin error from annotate:

  Unrecognized file (/tmp/qiime2/user/processes/8091-1774988190.54@user/tmp/q2-OutPath-8397_eb5/eggnog.taxa.tar.gz) for EggnogRefDirFmt.

See above for debug info.
(qiime2-moshpit-2026.1) user@I2510:/media/data$ mosh annotate fetch-eggnog-db     --o-db eggnog_db.qza     --verbose
/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/q2_assembly/_utils.py:14: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
Running external command line application(s). This may print messages to stdout and/or stderr.
The command(s) being run are below. These commands cannot be manually re-run as they will depend on temporary files that no longer exist.

Command: download_eggnog_data.py -y -D --data_dir /tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j

Downloading "eggnog.db" at /tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j...
cd /tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j && wget -nH --user-agent=Mozilla/5.0 --relative --no-parent --reject "index.html*" --cut-dirs=4 -e robots=off -O eggnog.db.gz http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.db.gz && echo Decompressing... && gunzip eggnog.db.gz 
--2026-03-31 22:28:33--  http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.db.gz
Resolving eggnogdb.embl.de (eggnogdb.embl.de)... 194.94.44.170
Connecting to eggnogdb.embl.de (eggnogdb.embl.de)|194.94.44.170|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2026-03-31 22:28:33 ERROR 404: Not Found.

Downloading "eggnog.taxa.db" at /tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j...
cd /tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j && wget -nH --user-agent=Mozilla/5.0 --relative --no-parent --reject "index.html*" --cut-dirs=4 -e robots=off -O eggnog.taxa.tar.gz http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.taxa.tar.gz && echo Decompressing... && tar -zxf eggnog.taxa.tar.gz && rm eggnog.taxa.tar.gz
--2026-03-31 22:28:33--  http://eggnogdb.embl.de/download/emapperdb-5.0.2/eggnog.taxa.tar.gz
Resolving eggnogdb.embl.de (eggnogdb.embl.de)... 194.94.44.170
Connecting to eggnogdb.embl.de (eggnogdb.embl.de)|194.94.44.170|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2026-03-31 22:28:33 ERROR 404: Not Found.

Skipping diamond database (or already present). Use -f to force download
Skipping novel families diamond and annotation databases (or already present). Use -F and -f to force download
Skipping Pfam database (or already present). Use -P and -f to force download
Skipping MMseqs2 database (or already present). Use -M and -f to force download
No HMMER database requested. Use "-H -d taxid" to download the hmmer database for taxid
Finished.
Traceback (most recent call last):
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/q2cli/commands.py", line 573, in __call__
    results = self._execute_action(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/q2cli/commands.py", line 645, in _execute_action
    results = action(**arguments)
  File "<decorator-gen-1007>", line 2, in fetch_eggnog_db
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/action.py", line 307, in bound_callable
    outputs = self._callable_executor_(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/action.py", line 513, in _callable_executor_
    self.signature.coerce_given_outputs(output_views, output_types,
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/type/signature.py", line 509, in coerce_given_outputs
    output = self._create_output_artifact(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/type/signature.py", line 531, in _create_output_artifact
    artifact = rachis.sdk.Artifact._from_view(
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/sdk/result.py", line 704, in _from_view
    result = transformation(view, validate_level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/transform.py", line 68, in transformation
    self.validate(view, level=validate_level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/core/transform.py", line 143, in validate
    view.validate(level)
  File "/opt/miniconda3/envs/qiime2-moshpit-2026.1/lib/python3.10/site-packages/rachis/plugin/model/directory_format.py", line 183, in validate
    raise ValidationError("Unrecognized file (%s) for %s."
rachis.core.exceptions.ValidationError: Unrecognized file (/tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j/eggnog.taxa.tar.gz) for EggnogRefDirFmt.

Plugin error from annotate:

  Unrecognized file (/tmp/qiime2/user/processes/8305-1774988878.91@user/tmp/q2-OutPath-aqbw8q6j/eggnog.taxa.tar.gz) for EggnogRefDirFmt.

See above for debug info.

Can’t I edit download_eggnog_data.py?

Yeah!

It's exactly what they did to fix it:

This should work, so let us know if it doesn't!

Yes that worked, changed lines 15 and 18 in ./bin/download_eggnog_data.py

Thanks!

1 Like

@jack2017, @colinbrislawn - I just want to :qiime2: in with a note on this approach. In general, I wouldn't recommend editing the source code, as it has the effect of introducing real challenges for reproducibility. For example, if you wrote up a paper on your results and said something like "... the database was downloaded with MOSHPIT 2026.1..." that statement wouldn't technically be true - because you used a modified version of MOSHPIT 2026.1. You would need to describe your modifications/etc, which others would then have to make to reproduce your work exactly, ... hence the challenge for reproducibility.

Despite the code change being the same, the approach differs from what @felicia did as that change is tracked in the git revision history (unlike a local change to source code).

All of that said, this is probably ok as a workaround for this specific case - I just want to state that the approach isn't ideal, and remind you to record and report the exact version of the eggnog database you're accessing in your bioinformatics workflow notes.

Other types of edits (e.g., editing source code locally to change how an algorithm works inside of one of the MOSHPIT methods) could cause big headaches, and for that reason in general I recommend against this approach.

We're exploring options behind the scenes to help users get around this type of thing in a more straight-forward way in the future. Sorry for the inconvenience!

2 Likes

Dear Greg, you are absolutely right. Thanks.

The problem is that I am not familiar with the git revision procedures.

FYI the exact changes that I did were in Moshpit 2026.1: ./bin/download_eggnog_data.py

Old (starting line 15):

BASE_URL = f'http://eggnogdb.embl.de/download/emapperdb-{__DB_VERSION__}'
EGGNOG_URL = f'http://eggnog5.embl.de/download/eggnog_5.0/per_tax_level'
EGGNOG_DOWNLOADS_URL = 'http://eggnog5.embl.de/#/app/downloads'
NOVEL_FAMS_BASE_URL = f'http://eggnogdb.embl.de/download/novel_fams-{__NOVEL_FAMS_DB_VERSION__}'

New:

BASE_URL = f'http://eggnog5.embl.de/download/emapperdb-{__DB_VERSION__}'
EGGNOG_URL = f'http://eggnog5.embl.de/download/eggnog_5.0/per_tax_level'
EGGNOG_DOWNLOADS_URL = 'http://eggnog5.embl.de/#/app/downloads'
NOVEL_FAMS_BASE_URL = f'http://eggnog5.embl.de/download/novel_fams-{__NOVEL_FAMS_DB_VERSION__}'

Makes sense @jack2017. My recommendation here is just to record the URL that the DB was downloaded from (which should be available in output like what you pasted above) so when you write it up you can say something like "... database was downloaded with MOSHPIT 2026.1 from url here on 31 March 2026...". Good luck with your analysis!

1 Like

Hi, @jack2017, while the error you received is somewhat related to the previously mentioned issue, the exact problem is described here: BUG: Running `fetch-eggnog-db` results in ERROR 404: Not Found. Ā· Issue #315 Ā· bokulich-lab/q2-annotate Ā· GitHub . In short, our code calls another script in EggNOG-mapper that in its turn uses the old, broken URL. At the bottom the issue description, you will find a temporary workaround (although it looks like you already found your way around it). We were hoping that the issue in the script would be fixed by now, but since it hasn’t, we intend to stop relying on it altogether for the downloads. Therefore, I have created a PR which removes reliance on the broken script and downloads each file manually. This might be irrelevant to you now, but might help anyone else who stumbles upon this issue in the future.

3 Likes