Daha çox

QGIS: xüsusi quruluş, python xətası

QGIS: xüsusi quruluş, python xətası


Windows 7 -də qgis mənbəyi qurdum. Libs osgeow4 saytından endirildi. Postgressi hətta müstəqil olaraq quraşdırdım.

Tətbiq başladıqda bu xətanı alıram ...

"C: /development/qgis2.9.0 /./ python/plugins processing algs qgis postgis_utils.py" faylı 28, import psycopg2 -də
Fayl "C: /development/qgis2.9.0 /./ python qgis utils.py", satır 483, _import mod = _builtin_import (ad, qlobal miqyaslılar, yerli əhali, siyahıdan, səviyyə)
"C: development OSGeo4W apps Python27 Lib site-packages psycopg2__init __. Py" faylı, 71-ci sətir, psycopg2._psycopg idarəsindən BINARY, NUMBER, STRING, DATETIME, ROWID
Fayl "C: /development/qgis2.9.0 /./ python qgis utils.py", 483 -cü sətir, _import mod = _builtin_import (ad, qlobal miqyaslılar, yerli əhali, siyahıdan, səviyyə) ImportError: DLL yüklənməsi uğursuz oldu: Göstərilən modul tapılmadı.

Bütün python yollarımı və s. Yoxladım, amma psycopg2 plagininin nə olduğunu bilmirəm.

İstənilən istiqamət əla olardı.


Osgeo4w yükləyicisinin sizi bu vəziyyətdə niyə tərk edəcəyini təxmin edə bilmirəm. Bütün lazımi DLL -ləri quracağını təxmin edərdim.

Ancaq "Göstərilən modul tapıla bilməz" təcrübəm, demək olar ki, həmişə iki şeydən biridir:

  1. İlə bir problemYOLPython (və ya hər hansı bir şey) PostgreSQL müştəri kitabxanalarınızı (yəni yaşadıqlarını) tapa bilməməsi üçün mühit dəyişənidir.C: Proqram Faylları PostgreSQL 9.3 bin) və ya
  2. Python və PostgreSQL kitabxanaları arasında bir memarlıq uyğunsuzluğu (məsələn, Python 32 bit və PostgreSQL 64 bit).

Nou-hau varsa, bəlkə bir problem olub olmadığını öyrənmək üçün bunları yoxlaya bilərsən.


Müasir Python -da xüsusi istisnaları elan etməyin düzgün yolu?

Müasir Python -da xüsusi istisna sinifləri elan etməyin düzgün yolu nədir? Əsas məqsədim, digər istisna siniflərinin standartlarına riayət etməkdir ki, (məsələn) istisnaya daxil etdiyim əlavə simlər istisnanı tutan hər hansı bir alətlə çap olunsun.

"Müasir Python" dedikdə, Python 2.5 -də işləyəcək, lakin Python 2.6 və Python 3 üçün* düzgün olan bir şeyi nəzərdə tuturam. "Xüsusi" dedikdə, səhvin səbəbi haqqında əlavə məlumatlar daxil edə biləcək bir İstisna obyekti nəzərdə tuturam: bir simli, bəlkə də istisnaya aid başqa bir ixtiyari obyekt.

Python 2.6.2 -də aşağıdakı ləğv xəbərdarlığı məni bağladı:

BaseException -ın mesaj adlı atributlar üçün xüsusi bir mənaya sahib olması dəli görünür. PEP-352-dən toplayıram ki, 2.5-də atributun xüsusi bir mənası var, köhnəltməyə çalışırlar, buna görə də bu adın (və tək birinin) indi qadağan olduğunu düşünürəm? Uf.

İstisnanın bəzi sehrli parametr arqlarına sahib olduğunu da yaxşı bilirəm, amma necə istifadə edəcəyimi heç vaxt bilməmişəm. Python 3 -də args -ı yox etməyə çalışdıqlarını irəli sürdüyümü düşündüyüm bir çox müzakirəni irəlidə aparacaq şeylərin doğru yol olduğuna əmin deyiləm.

Yeniləmə: iki cavab __init__ və __str__ / __unicode__ / __repr__ əvəz edilməsini təklif etdi. Çox yazmaq kimi görünür, buna ehtiyac varmı?


Python -dakı bütün modulların müəyyən bir kataloq quruluşu olmalıdır. Detalları burada tapa bilərsiniz.

Model qovluğunun altında __init__.py adlı boş bir fayl yaradın ki, kataloq quruluşunuz belə görünsün:

Həm də hello-world.py faylınızda idxal ifadəsini aşağıdakı kimi dəyişdirin:

P.S .: Model kataloqunuzu başqa bir yerə (eyni kataloq şöbəsində deyil) yerləşdirirsinizsə, sys.path istifadə edərək python yolunu dəyişdirməlisiniz.

iyerarxiyadakı hər bir qovluqda __init__.py (hər tərəfdə iki alt xətt) adlı bir fayla ehtiyacınız var, buna görə də biri src/ və biri modeldə/. Python, müəyyən bir qovluğa daxil olması lazım olduğunu bilmək üçün axtardığı budur. Faylların başlanğıc təlimatlarını ehtiva etməsi nəzərdə tutulur, lakin onları boş yaratsan belə bu onu həll edəcək.

Əgər kök modulunuzdursa, onu PYTHONPATH -a əlavə edin (PyCharm adətən bunu edir)

Modulun quraşdırıldığından əmin olmalısınız hamısı python versiyaları

Python üçün bir modulun quraşdırılıb quraşdırılmadığını yoxlaya bilərsiniz:

pip silin modul adı

Quraşdırılıbsa, onu silmək istədiyinizi soruşacaq. Mənim problemim python üçün quraşdırılmışdı, amma python3 üçün yox idi. Python3 üçün bir modulun quraşdırılıb quraşdırılmadığını yoxlamaq üçün:

python3 -m pip silin modul adı

Bunu etdikdən sonra, bir və ya hər iki versiya üçün modulun quraşdırılmadığını görürsünüzsə, modulu quraşdırmaq üçün bu iki əmrdən istifadə edin.


Python 2.6 və sonraları və Python 3.x üçün:

Python 2.5 və daha əvvəllər üçün istifadə edin:

İzləmə modulu istisnaları və onların izlərini formatlaşdırmaq və çap etmək üçün üsullar təqdim edir, məsələn. bu, standart işləyicinin etdiyi kimi istisnanı çap edəcək:

Daxilində Python 2.6 və ya daha yüksək bir az daha təmizdir:

Köhnə versiyalarda hələ də oxunaqlıdır:

Xəta sətirlərini ötürmək istəyirsinizsə, burada Xətalar və İstisnalardan bir nümunə (Python 2.6)

(Bunu @jldupontun cavabına bir şərh olaraq buraxmaq istəyirdim, amma kifayət qədər nüfuza malik deyiləm.)

@Jldupontun cavabı kimi cavabları başqa yerlərdə də gördüm. FWIW, hesab edirəm ki, bunu qeyd etmək vacibdir:

xəta çıxışını default olaraq sys.stdout -a çap edəcək. Ümumiyyətlə səhvlərin həllinə daha uyğun bir yanaşma olardı:

(Bunun işləməsi üçün sys idxal etməli olduğunuzu unutmayın.) Bu şəkildə səhv, STDOUT yerinə STDERR -ə yazdırılır ki, bu da düzgün çıxışı təhlil etməyə/yönləndirməyə/və s. Sualın "səhv çap etmə" ilə bağlı olduğunu başa düşürəm, amma nəticədə daha yaxşı öyrənməyən hər kəs üçün qeyri-standart koda səbəb ola biləcək bu detalı buraxmaqdansa ən yaxşı təcrübəni qeyd etmək vacibdir.

Trackback modulunu Cat Plus Plus -ın cavabında olduğu kimi istifadə etməmişəm və bəlkə də bu ən yaxşı yoldur, amma bunu ora atacağımı düşündüm.


Sistem parametrlərindən qoşulmağa çalışdığınız uzaq server sertifikatını imzalamaq üçün istifadə olunan CA sertifikatını ağ siyahıya alaraq həll etməli olduğunuz bir problem. Ancaq yalnız sınamaq üçün aşağıdakıları istifadə edərək yoxlamanı söndürə bilərsiniz.

Bunu istehsalda istifadə etməyin.

Bu səhv demək olar ki, uzaq uç nöqtəsinin yerli sertifikat səlahiyyətli mağazanızda bir sertifikatla imzalanmadığını bildirir. İki seçiminiz var:

Sertifikatı istifadə etməyi tələb edən CA mağazasına quraşdırın. Varsayılan olaraq, bu, yerli sistem CA mağazanızdır, ən azı istəklər ilə müəyyən edilə bilər.

İstək sessiyası obyektində istifadə ediləcək fərqli bir sertifikat dəsti konfiqurasiya edin.


Videoya baxın: QGIS Customization with Python