bioFAM/MOFA

AttributeError: module 'mofapy' has no attribute 'core.entry_point'

dfermin opened this issue · 4 comments

Hi

This is a weird problem.
I've installed MOFA and I'm trying to work through the CLL example but can't execute the runMOFA(MOFAObject) command.

I keep getting this error:

x <- runMOFA(MOFAObject)                                                                                                                                                                          
[1] "No output file provided, using a temporary file..."  
Error in py_get_attr_impl(x, name, silent) : 
  AttributeError: module 'mofapy' has no attribute 'core.entry_point'

I'm using an Anaconda environment running Python 3.6.
It seems that reticulate has detected the correct instance and sees the mofapy package:

> py_config()
python:         /home/dfermin/anaconda3/envs/py36/bin/python
libpython:      /home/dfermin/anaconda3/envs/py36/lib/libpython3.6m.so
pythonhome:     /home/dfermin/anaconda3/envs/py36:/home/dfermin/anaconda3/envs/py36
version:        3.6.7 | packaged by conda-forge | (default, Jul  2 2019, 02:18:42)  [GCC 7.3.0]
numpy:          /home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/numpy
numpy_version:  1.17.0
mofapy:         /home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/mofapy

When I go to the site-packages directory I see mofapy and the entry_point.py script is there:

ls /home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/mofapy/core/
BayesNet.py
build_model.py
distributions.py
entry_point.py
init_nodes.py
__init__.py
mixed_nodes.py
multiview_nodes.py
nodes.py
nongaussian_nodes.py
__pycache__
simulate.py
updates.py
utils.py
variational_nodes.py

I can import the library in python without any issues.
I'm not using Rstudio, this is all on the terminal on an instance of RHEL.
I've tried multiple versions of R and I'm currently using a freshly compiled version of 3.6.1.
Does anyone have a suggestion for a work around?

The R sessionInfo outptu is given below in case it helps.

 > sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Workstation 7.7 (Maipo)

Matrix products: default
BLAS/LAPACK: /home/dfermin/apps/openBLAS.libs/lib/libopenblas_haswellp-r0.3.6.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] reticulate_1.13 MOFAdata_1.1.0  MOFA_1.1.1

loaded via a namespace (and not attached):
 [1] SummarizedExperiment_1.14.1 beeswarm_0.2.3
 [3] tidyselect_0.2.5            purrr_0.3.3
 [5] reshape2_1.4.3              corrplot_0.84
 [7] rhdf5_2.28.1                lattice_0.20-38
 [9] colorspace_1.4-1            stats4_3.6.1
[11] rlang_0.4.1                 pillar_1.4.2
[13] glue_1.3.1                  BiocParallel_1.18.1
[15] BiocGenerics_0.30.0         RColorBrewer_1.1-2
[17] matrixStats_0.55.0          GenomeInfoDbData_1.2.1
[19] foreach_1.4.7               plyr_1.8.4
[21] stringr_1.4.0               zlibbioc_1.30.0
[23] munsell_0.5.0               gtable_0.3.0
[25] codetools_0.2-16            Biobase_2.44.0
[27] IRanges_2.18.3              doParallel_1.0.15
[29] MultiAssayExperiment_1.10.4 GenomeInfoDb_1.20.0
[31] vipor_0.4.5                 parallel_3.6.1
[33] Rcpp_1.0.2                  scales_1.0.0
[35] DelayedArray_0.10.0         S4Vectors_0.22.1
[37] jsonlite_1.6                XVector_0.24.0
[39] ggplot2_3.2.1               stringi_1.4.3
[41] dplyr_0.8.3                 ggrepel_0.8.1
[43] cowplot_1.0.0               GenomicRanges_1.36.1
[45] grid_3.6.1                  tools_3.6.1
[47] bitops_1.0-6                magrittr_1.5
[49] RCurl_1.95-4.12             lazyeval_0.2.2
[51] tibble_2.1.3                crayon_1.3.4
[53] pkgconfig_2.0.3             pheatmap_1.0.12
[55] Matrix_1.2-17               ggbeeswarm_0.6.0
[57] assertthat_0.2.1            iterators_1.0.12
[59] Rhdf5lib_1.6.3              R6_2.4.0
[61] compiler_3.6.1

I've been trying to debug this and found this inconsistency. I don't know if it will help
When I try to access the data in the mofa.core module from within R I cannot see any of the functions:

> library(reticulate)
> use_condaenv(condaenv="py36", required=TRUE)

> mofa <- import("mofapy")
> py_list_attributes(mofa$core)
[1] "__builtins__" "__cached__"   "__doc__"      "__file__"     
[5] "__loader__"   "__name__"     "__package__"  "__path__"     "__spec__"

> dir("/home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/mofapy/core")
[1] "__init__.py"          "__pycache__"          "BayesNet.py"          "build_model.py"       
[5] "distributions.py"     "entry_point.py"       "init_nodes.py"        "mixed_nodes.py"
[8] "multiview_nodes.py"   "nodes.py"   "nongaussian_nodes.py"   "simulate.py" 
[12] "updates.py"           "utils.py"             "variational_nodes.py"

If I load a different python module the functions are visible and correspond to the python scripts for the module:

> vcf <- import("vcf") ## importing the PyVCF module
> py_list_attributes(vcf)
[1] "Filter"          "RESERVED_FORMAT" "RESERVED_INFO"   "Reader"
[5] "SampleFilter"    "VCFReader"       "VCFWriter"       "VERSION"
[9] "Writer"          "__builtins__"    "__cached__"      "__doc__"
[13] "__file__"        "__loader__"      "__name__"        "__package__"
[17] "__path__"        "__spec__"        "filters"         "model"
[21] "parser"          "sample_filter"

>dir("home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/vcf/")
[1] "__init__.py"      "__pycache__"      "cparse.pyx"       "filters.py" 
[5] "model.py"         "parser.py"        "sample_filter.py" "test"
[9] "utils.py"

If I switch over to python I have the same error that I observe in R:

$ conda activate py36
$ python
>>> from mofapy import core
>>> core
<module 'mofapy.core' from '/home/dfermin/anaconda3/envs/py36/lib/python3.6/site-packages/mofapy/core/__init__.py'>
>>> core.entry_point
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'mofapy.core' has no attribute 'entry_point'

This doesn't happen with the vcf module I tested earlier.
I don't know if this is because the vcf module doesn't contain a core subdirectory or not but I thought someone with a better understanding of python might be able to suggest a fix.

loipf commented

if somebody is still interested:
I had the same problem when installing mofapy directly in my conda-environment. After a long trial and error an installation from R helped to solve the problem, but I still do not know why:

run in R:

library(reticulate)
py_install("mofapy", envname = "mofa_env", method="conda",
  conda = "/opt/anaconda/3-5.0.1/bin/conda", pip=TRUE)

additionally restart the R session afterwards

I had the same issue running MOFA2 on RStudio Server. The error message said also: "AttributeError: module 'mofapy' has no attribute 'core.entry_point'" I noticed that r-reticulate generated a conda env by itself.

So, I did not changed the conda_env for my MOFA run and installed mofapy2 by first accessing the r-reticulate env:
conda activate /home/XXX/.local/share/r-miniconda/envs/r-reticulate

And install mofapy2:
pip install mofapy2

That solved the problem for me. Hope it is helpful.

Been running into this as well today, and I found the following helpful to debug (using MOFA2 and use_basilisk=FALSE):

  • Check reticulate::py_config() which python installation is used
  • Open this python in your terminal and try to import the module from mofapy2.run import entry_point

The error message you get will be more helpful than what run_mofa displays