Daha çox

PyQGIS -ə fmeobjects idxalı


Məkan məlumatlarının idarə edilməsi üçün FME -dən çox istifadə edirəm və PyQgisdəki Python kitabxanasından, fmeobjects -dən istifadə etmək istərdim.

Standart Python IDE -də aşağıdakıları işə salsam, yaxşı işləyir:

sys sys.path.append ("C:  Proqram Dosyaları (x86)  fme  fmeobjects  python27") idxal fmeobjects

Ancaq PyQgis -də işləyərkən eyni kod ImportError atır: DLL yükü uğursuz oldu: Göstərilən modul tapılmadı.

Əslində, fmeobjects bir .pyd faylıdır. Problemin bu olub olmadığını bilmirəm, çünki mənim anlayışım pyd və dllin bir -birinə bənzəməsidir.

PyQgis -ə idxal etmək üçün fmeobjects -i necə əldə edə bilərəm?


2016 yeniləmə! Bunu öz üzərimə götürməyə çalışıram və bu günə qədər araşdırdıqlarımı qoyacağımı düşünürdüm. Bu Windows 10 -da edilir. Linux istifadəçiləri üçün - problemlə qarşılaşırsınızsa bunu sınayın.

Xəbərdarlıq: FME 2016 -nı python qgis -ə inteqrasiya etmək istəyənlər üçün bilin ki, 'pip install fmeobjects' kimi asan deyil :)


Addım 1

Fmeobjects.pyd faylınızı tapın. Məncə bu, həqiqətən də ən çətin hissəsidir! .Pyd fayllarına giriş üçün bura baxın. Əsasən bir Python Windows DLL faylıdır.

Python 2.7 üçün fayl aşağıdakı ünvanda olmalıdır:

C:  apps  FME2016  fmeobjects  python27  fmeobjects.pyd

QGIS hələlik Python3 -dən istifadə etmir, ancaq qarşıdakı QGIS 3 versiyasında istifadə edərsə, istifadə etməlisiniz:

C:  apps  FME2016  fmeobjects  python34  fmeobjects.pyd

Mənim üçün fayl D: apps FME2016 fmeobjects python27 fmeobjects.pyd ünvanında yerləşirdi. O faylı tapana qədər ətrafında axtarın.


Addım 2

Sonra, fmeobjects modulunu idxal edək! Tapa biləcəyim ən rəsmi sənədlər burada, FME 2015 -ə aid olduğunu unutmayın, lakin 2016 -cı ildə işləməlidir. 'Teoriyada' aşağıdakı kod işləməlidir:

syspath.append sys idxal edin ("C:  apps  FME2016  fmeobjects  python27") fmeobjects idxal edin

Qabaqcıl

"ImportError: DLL yüklənməsi uğursuz oldu: Göstərilən modul tapılmadı" səhvini alırsınızsa bura baxın.

İndi maraqlanırsınızsa, http://www.dependencywalker.com/ saytına daxil olub proqramı yükləyə bilərsiniz (portativdir) və fmeobjects.pyd faylınızı axtarıb işlədə bilərsiniz.

İkinci görüntüdə fme.dll, fmepython27.dll, fmeutil.dll və rwtool_fme.dllin necə sarı rəngdə olduğunu görürsünüzmü? Bunlar sys.path -da olmayan asılılıqlardan məhrumdur.

Bu dörd fayl daha yüksək səviyyəli bir kataloqda görünür (mənim vəziyyətimdə D: apps FME2016 ). Beləliklə, bu yüksək səviyyəli qovluğu sys.path-a, həmçinin cme (qovluğu dəyişdir) fme-nin yerləşdiyi yerə əlavə edirik ki, fmeobjects düzgün yüklənsin. Python skripti belə olur:

id id idxal sys sys.path.append ("C:  apps  FME2016  fmeobjects  python27") sys.path.append ("C:  apps  FME2016 ") #bu os əlavə edin .chdir ("C:  apps  FME2016 ") #bunu da edin (birtəhər lazım) fmeobjects idxal edin

Addım 3

İşlərin işlədiyini yoxlayın.

licMan = fmeobjects.FMELicenseManager () # Çap FME lisenziya növü. 'FME Lisans Növü:', licMan.getLicenseType () # FME lisenziya mülkiyyət adlarını çap edin.

Qeyd: burada "FMEException: FMEException: -1:" səhvini alsanız, düşünürəm ki, python skriptiniz FME Desktop ilə eyni maşında işləmir. Məsələn, kodunuz yerli sürücünüzdədir, ancaq FME bir serverdə quraşdırılmışdır.


Addım 4

Bir dəzgah işləyin!

işçi = fmeobjects.FMEWorkspaceRunner () worker.run ('D: /fme/Workspaces/test.fmw')

Addım 5

API -yə girin.


Şəxsən mən skriptimi dəfələrlə çox işlədirəm, buna görə bəzi if-and ifadələrim var və istisna olmaqla:

idxal sys fmePydPath = "C:  apps  FME2016  fmeobjects  python27" #fme fayl yolu fmePath = "C:  apps  FME2016 ", fmePydPath sys.path: sys.path -da deyilsə. append (fmePydPath) #fmePath sys.path -da olmadıqda çoxlu əlavələrin qarşısını alır: sys.path.append (fmePath) os.chdir (fmePath) import fmeobjects #Şeylərin işlədiyini təsdiqləyir licMan = fmeobjects.FMELicenseManager () #FME lisenziya növünü çap edin . 'FME Lisans Növü:', licMan.getLicenseType () # FME lisenziya mülkiyyət adlarını çap edin. #Bir iş sahəsi (.fmw) faylını sınayın cəhd edin: işçi = fmeobjects.FMEWorkspaceRunner () worker.run ('D: /fme/Workspaces/test.fmw') fmeobjects.FMEException istisna olmaqla, səhv: çap "FMEException: %s" % səhv

Windows -da QGIS -in öz Python versiyası var. Varsayılan olaraq kitabxanaları quraşdırsanız (məs.pip quraşdırma name_of_library) QGIS üçün deyil, yalnız təmiz Python versiyanızda quraşdırılacaq.

Budur bir bələdçi, faydalı ola biləcəyini düşünürəm: http://quantumofgis.blogspot.be/2014/11/qgis-standalone-and-python-modules.html


Fmeobjects.pyd faylını QGIS saytına kopyalamağa çalışın.

Kimdən:

fmeobjects python27 fmeobjects.pyd

Kimə:

Lib site-paketləri fmeobjects.pyd