أكثر

استيراد fmeobjects إلى PyQGIS

استيراد fmeobjects إلى PyQGIS


أستخدم FME كثيرًا لمعالجة البيانات المكانية ، وأود الاستفادة من مكتبة Python ، fmeobjects في PyQgis.

إذا قمت بتشغيل ما يلي في Python IDE القياسي الخاص بي ، فإنه يعمل بشكل جيد:

استيراد sys sys.path.append ("C:  Program Files (x86)  fme  fmeobjects  python27") استيراد fmeobjects

لكن نفس الرمز بالضبط ، عند تشغيله في PyQgis ، يلقي خطأ استيراد: فشل تحميل DLL: تعذر العثور على الوحدة النمطية المحددة.

في الواقع ، fmeobjects هو ملف .pyd. لا أعرف ما إذا كانت هذه هي المشكلة ، لأنني أفهم أن pyd و dll متشابهان.

كيف يمكنني الحصول على fmeobjects للاستيراد إلى PyQgis؟


تحديث 2016! كنت أحاول جعل هذا يعمل بنفسي واعتقدت أنني سأضع ما بحثت عنه حتى الآن. يتم ذلك على نظام التشغيل Windows 10. بالنسبة لمستخدمي Linux - جرب هذا إذا كنت تواجه مشكلات.

تحذير: بالنسبة لأولئك الذين يرغبون في دمج FME 2016 في python qgis ، فاعلموا أن الأمر ليس سهلاً مثل "pip install fmeobjects" :)


الخطوة 1

حدد موقع ملف fmeobjects.pyd الخاص بك. أعتقد أن هذا هو الجزء الأصعب حقًا! انظر هنا للحصول على مقدمة لملفات .pyd. إنه في الأساس ملف Python Windows DLL.

بالنسبة إلى Python 2.7 ، يجب أن يكون الملف على:

C:  apps  FME2016  fmeobjects  python27  fmeobjects.pyd

لا يستخدم QGIS Python3 حتى الآن ، ولكن إذا كان يستخدم في إصدار QGIS 3 القادم ، فيجب عليك استخدام:

C:  apps  FME2016  fmeobjects  python34  fmeobjects.pyd

بالنسبة لي ، كان الملف موجودًا في D: apps FME2016 fmeobjects python27 fmeobjects.pyd. لذا ابحث حتى تجد هذا الملف.


الخطوة 2

بعد ذلك ، دعنا نستورد الوحدة النمطية fmeobjects! أكثر الوثائق الرسمية التي يمكنني العثور عليها هنا ، لاحظ أنها تشير إلى FME 2015 ، ولكن يجب أن تعمل في 2016. في "النظرية" ، يجب أن يعمل الكود التالي:

استيراد sys sys.path.append ("C:  apps  FME2016  fmeobjects  python27") استيراد fmeobjects

متقدم

إذا كنت تتلقى الخطأ "خطأ استيراد: فشل تحميل DLL: تعذر العثور على الوحدة النمطية المحددة" ، انظر هنا.

الآن ، إذا كنت حريصًا ، يمكنك الانتقال إلى http://www.dependencywalker.com/ ، وتنزيل التطبيق (إنه محمول) والبحث عن ملف fmeobjects.pyd الخاص بك ، وتشغيله

تعرف على كيفية ظهور fme.dll و fmepython27.dll و fmeutil.dll و rwtool_fme.dll باللون الأصفر في الصورة الثانية؟ هذه تبعيات مفقودة ليست في نظامنا.

يبدو أن هذه الملفات الأربعة موجودة في دليل ذي مستوى أعلى (D: apps FME2016 في حالتي). لذلك قمنا بإضافة دليل المستوى الأعلى إلى sys.path ، وكذلك cd (تغيير الدليل) إلى حيث يوجد fme بحيث يتم تحميل fmeobjects بشكل صحيح. وهكذا يصبح نص بيثون:

استيراد نظام التشغيل استيراد sys sys.path.append ("C:  apps  FME2016  fmeobjects  python27") sys.path.append ("C:  apps  FME2016 ") # إضافة نظام التشغيل هذا .chdir ("C:  apps  FME2016 ") # قم بهذا أيضًا (مطلوب بطريقة ما) استيراد fmeobjects

الخطوه 3

تحقق من أن الأشياء تعمل.

licMan = fmeobjects.FMELicenseManager () # طباعة نوع ترخيص FME. اطبع "نوع ترخيص FME:" ، licMan.getLicenseType () # أسماء ملكية ترخيص FME.

ملاحظة: إذا تلقيت الخطأ "FMEException: FMEException: -1:" هنا ، أعتقد أن هذا يعني أن نص Python الخاص بك لا يعمل على نفس الجهاز مثل FME Desktop. على سبيل المثال الرمز الخاص بك موجود على محرك الأقراص المحلي الخاص بك ولكن FME مثبت على الخادم.


الخطوة 4

قم بتشغيل طاولة العمل!

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

الخطوة الخامسة

انغمس في API.


أنا شخصياً أقوم بتشغيل البرنامج النصي مرارًا وتكرارًا ، لذلك لدي بعض عبارات if-then وأعد المحاولة باستثناء الأشياء:

import sys fmePydPath = "C:  apps  FME2016  fmeobjects  python27" #fme file path fmePath = "C:  apps  FME2016 " إذا لم يكن fmePydPath موجودًا في sys.path: sys.path. append (fmePydPath) #prevents الكثير من الإلحاق إذا لم يكن fmePath في sys.path: sys.path.append (fmePath) os.chdir (fmePath) استيراد fmeobjects # التحقق من أن الأشياء تعمل LicMan = fmeobjects.FMELicenseManager () # طباعة نوع ترخيص FME . اطبع "نوع ترخيص FME:" ، licMan.getLicenseType () # أسماء ملكية ترخيص FME. # تشغيل ملف مساحة عمل (.fmw) حاول: worker = fmeobjects.FMEWorkspaceRunner () worker.run ('D: /fme/Workspaces/test.fmw') باستثناء fmeobjects.FMEException ، يخطئ: طباعة "FMEException:٪ s"٪ يخطئ

في نظام التشغيل Windows ، يحتوي QGIS على إصدار Python الخاص به. بشكل افتراضي إذا قمت بتركيب مكتبات (مثل.تثبيت Pip name_of_library) سيتم تثبيته فقط في إصدار Python الخاص بك وليس لـ QGIS.

هذا دليل ، أعتقد أنه قد يكون مفيدًا: http://quantumofgis.blogspot.be/2014/11/qgis-standalone-and-python-modules.html


حاول نسخ fmeobjects.pyd إلى موقع QGIS.

من:

fmeobjects python27 fmeobjects.pyd

ل:

Lib site -packs fmeobjects.pyd