Aktualizacja Zbliża się. Teraz pracuję f2py na pliku .pyf, który powinien generować moduł _glmnet.

Zbuduję pakiet Python-GLMNET pakiet z następującym poleceniem.

python setup.py config_fc --fcompiler=gnu95         
                                           --f77flags='-fdefault-real-8'         
                                          --f90flags='-fdefault-real-8' build

Ale kiedy importuję moduł, otrzymuję ten błąd:

Plik "/users/rose/221/takger/tager/glmnet/glmnet.py.py", linia 2, w imporcie _glmnet importerror: brak modułu o nazwie _glmnet

Jak mogę importować ten moduł?

Katalog GLMNET zawiera również plik glmnet.pyf, który zaczyna się od następujących:

!    -*- f90 -*-
! Note: the context of this file is case sensitive.

python module _glmnet ! in
    interface  ! in :_glmnet
        subroutine elnet(ka,parm,no,ni,x,y,w,jd,vp,ne,nx,nlam,flmin,ulam,thr,isd,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) ! in :glmnet:glmnet.f
            integer optional :: ka=1 ! Use covariance updates over naive by default
            real*8 :: parm
            integer intent(hide),check(shape(x,0)==no),depend(x) :: no=shape(x,0)
            integer intent(hide),check(shape(x,1)==ni),depend(x) :: ni=shape(x,1)
            real*8 dimension(no,ni) :: x
            real*8 dimension(no),depend(no) :: y
            real*8 dimension(no),depend(no) :: w
            integer dimension(*) :: jd
            real*8 dimension(ni),depend(ni) :: vp
            integer optional,depend(x) :: ne=min(shape(x,1), nx)
            integer :: nx
            integer optional,check((flmin < 1.0 || len(ulam)==nlam)),depend(flmin,ulam) :: nlam=len(ulam)
            real*8 :: flmin
            real*8 dimension(nlam) :: ulam
            real*8 :: thr
            integer optional :: isd=1 ! Standardize predictors by default

AKTUALIZACJA

Gdzie mogę znaleźć ten moduł {x0}}? Czy jest to zawarte w pliku GLMNET.PYF, jak pokazano poniżej? Próbowałem dodać ten folder odziezny do mojego {x1}}, ale to nic nie zmieniło.

~/221/tagger/tagger/glmnet master ls
__init__.py                  example_lasso_elastic_net.py glmnet.pyc
__init__.pyc                 glmnet.f                     glmnet.pyf
elastic_net.py               glmnet.py
~/221/tagger/tagger/glmnet master head -10 glmnet.pyf
!    -*- f90 -*-
! Note: the context of this file is case sensitive.

python module _glmnet ! in
    interface  ! in :_glmnet
        subroutine elnet(ka,parm,no,ni,x,y,w,jd,vp,ne,nx,nlam,flmin,ulam,thr,isd,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) ! in :glmnet:glmnet.f
            integer optional :: ka=1 ! Use covariance updates over naive by default
            real*8 :: parm
            integer intent(hide),check(shape(x,0)==no),depend(x) :: no=shape(x,0)
            integer intent(hide),check(shape(x,1)==ni),depend(x) :: ni=shape(x,1)
~/221/tagger/tagger/glmnet master echo $PYTHONPATH
/Users/rose/221/tagger/tagger/glmnet:
~/221/tagger/tagger/glmnet master cd ..
~/221/tagger/tagger master python main.py
Traceback (most recent call last):
  File "main.py", line 14, in <module>
    from glmnet import glmnet
  File "/Users/rose/221/tagger/tagger/glmnet/glmnet.py", line 2, in <module>
    import _glmnet
ImportError: No module named _glmnet
2
Rose Perrone 9 grudzień 2013, 01:32

2 odpowiedzi

Najlepsza odpowiedź

O ile mogę powiedzieć ze źródła, szuka modułu _gmlnet, który jest zdefiniowany w gmlnet.pyf. gmlnet.pyf nie jest modułem Pythona, jest to zestaw dodatkowych instrukcji dla programu o nazwie f2py, a Python zignoruje plik {x4}}. Musisz skompilować plik .pyf wraz z plikiem fortran przy użyciu f2py. Użyj polecenia takiego:

f2py -c --fcompiler=gnu95 gmlnet.pyf gmlnet.f

Spróbuj zainstalować f2py, a następnie ponownie zainstaluj pakiet gmlnet.

2
Dan 11 grudzień 2013, 04:59

Nie wiedząc zbyt wiele o tym, co jeszcze się dzieje, wygląda to jak Python nie wie, gdzie znajduje się pakiet _gmlnet. Jeśli jeszcze tego nie zrobiłeś, sprawdź zawartość zmiennej środowiskowej PYTHONPATH za pomocą echo $PYTHONPATH. Jeśli katalog _gmlnet nie ma tam, musisz go dodać.

  • Aby dodać coś do PYTHONPATH w bash, uruchom następujące polecenie:

    export PYTHONPATH=/path/to/_gmlnet/directory:$PYTHONPATH

  • Możesz sprawdzić, czy Python przeanalizował to poprawnie, wchodząc do interaktywnego terminalu i pisania

    import sys

    print sys.path

  • Wreszcie prawdopodobnie nie chcesz wpisać tego do swojej powłoki za każdym razem, gdy zaczynasz terminal. Dla systemu Mac OS, dodaj następujące elementy do końca swojego pliku {x0}}, jeśli używasz bash. Upewnij się, że ten plik kończy się nową linią.

    export PYTHONPATH=/path/to/_gmlnet/directory:$PYTHONPATH

0
Dan 10 grudzień 2013, 22:42