Arxiv

Archive for the ‘PHP/Python’ Category

File “cx_Oracle.pyc”, line 10, in __load importError: No module named decimal

Python ilə Tkinter vasitəsilə tez bir şəkildə simple Oracle password changer yazmaq lazım oldu.
Həmçinin bu .py faylı .exe-yə convert edib user-ə təqdim etmək lazım idi.
Source Kodları tapa bilərsiniz:

Password Changer GitHUB

Repo-da həm bizim əsl GUİ kodları həmçinin də setup.py faylı var ki, biz onun vasitəsilə .exe yaradırıq.
Lakin py2exe-ni çalışdırdıqda mövzunun adında olduğu kimi cx_ORACLE error verir.

Qeyd edim ki, cx_ORACLE Python və Oracle arasında əlaqə yaradan library-dir.
Uzun axtarışdan sonra aşkarladım ki,
Aşağıdakı şərti setup.py faylına yazdıqda problem həll olur. Bunu tapmaq mənim 1 saatımı apardı lakin sizlər daha bu qədər vaxt itirməyin:

opts={“py2exe” : {“dll_excludes”: [“OCI.dll”,], “includes” : [“decimal”, ]}

Setup.py faylında artıq qeyd olunub.
Kiçik GUİ-dən print screen:

password_changer

Running Python Script from crontab

Oracle expdp — üçün yazmış olduğum sadə script adi halda yəni birbaşa çağırdıqda işləyirdi , lakin cron-a qoşduqda işləmirdi.

Crontab-in outputunu hər hansısa fayla verdikdən sonra expdp: command not found error-unu gördüm.
Çox zaman bu error ORACLE_HOME/bin tapılmadıqda çıxır. Dolayısı ilə bu PATH-ləri Python kod daxilində environment variables şəklində verməklə problemi həll etdim.

Nümunə kod aşağıdakıdır:

import os
import datetime
import subprocess

os.environ['HOME'] = "/home/oracle"
os.environ['PATH'] = "/opt/app/oracle/product/11.2.0/db_1/bin:/usr/sbin:/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin"
os.environ['ORACLE_BASE']="/opt/app/oracle"
os.environ['ORACLE_HOME']="/opt/app/oracle/product/11.2.0/db_1"
os.environ['ORACLE_SID']="XXXXX"
os.environ['LD_LIBRARY_PATH'] = "/opt/app/oracle/product/11.2.0/db_1/lib:/lib:/usr/lib"


now = datetime.datetime.now()


file_name = 'xxxxx_'+str(now.day)+'_'+str(now.month)+'_'+str(now.year)+'_'+str(now.hour)+'_'+str(now.minute)+'_'+str(now.second)

comm = 'expdp'
connection = 'xxxx/xxxx'
schema = 'xxxxx'
dump_file = file_name+'.dmp'
log_file = file_name+'.log'

command = '%s %s schemas=%s directory=data_pump_directory dumpfile=%s logfile=%s' % (comm, connection, schema, dump_file, log_file)

cm = subprocess.call(command, shell=True, env=os.environ)

Crondan çağırıldıqda artıq Python fayl çalışacaq. Script çalışdıqda çalışdığı tarix və zaman da qeyd olunmaqla .dmp və .log fayllar generate olunacaq.
Məsələn aşağıdakı şəkildə:

xxxxx_31_1_2014_8_0_1.dmp
xxxxx_31_1_2014_8_0_1.log

Təşəkkürlər…

Kateqoriyalar: PHP/Python Etiketlər:

Installing Django on virtualenv (CentOS 6.4)

Bu tutorial-ı izlərkən edilən addımları təkrarlamağa çalışdım lakin bir çox problemlər çıxdı ki, onları qeyd edirəm bəlkə kiməsə yardımçı olar.
Ardıcıllığı ilə:

[root@localhost ~]# easy_install virtualenv
Searching for virtualenv
Reading https://pypi.python.org/simple/virtualenv/
Download error on https://pypi.python.org/simple/virtualenv/: unknown url type: https -- Some packages may not be found!
Couldn't find index page for 'virtualenv' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
Download error on https://pypi.python.org/simple/: unknown url type: https -- Some packages may not be found!
No local packages or download links found for virtualenv

Bunun həllini virtualenv-i paket şəklində download edib install etməklə tapdım:

[root@localhost virtualenv-1.9]# python setup.py install
running install
.
.
Installed /usr/local/lib/python2.7/site-packages/virtualenv-1.9-py2.7.egg
Processing dependencies for virtualenv==1.9
Finished processing dependencies for virtualenv==1.9

virtualenv yaradırıq:

[root@localhost ~]# virtualenv --no-site-packages django-sh
New python executable in django-sh/bin/python
Installing setuptools............done.
Installing pip...............done.

Aktivləşdiririk:

[root@localhost ~]# source django-sh/bin/activate
(django-sh)[root@localhost ~]# cd django-sh/

Və Django-nu install etməyə çalışırıq:

(django-sh)[root@localhost django-sh]# easy_install Django
Searching for Django
Reading http://pypi.python.org/simple/Django/
Download error: unknown url type: https -- Some packages may not be found!
Couldn't find index page for 'Django' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://pypi.python.org/simple/
Download error: unknown url type: https -- Some packages may not be found!
No local packages or download links found for Django
Best match: None

Bir başqa üsulla sınayırıq:

(django-sh)[root@localhost bin]# pip install django
.
.
class VerifiedHTTPSConnection(httplib.HTTPSConnection):
AttributeError: 'module' object has no attribute 'HTTPSConnection'

Alınmadı. Həll yolu kimi aşağıdakıları etdim:

[root@localhost ~]# yum install openssl openssl-devel
.
.
Installed:
  openssl-devel.x86_64 0:1.0.0-27.el6_4.2                                       

Dependency Installed:
  keyutils-libs-devel.x86_64 0:1.4-4.el6                                        
  krb5-devel.x86_64 0:1.10.3-10.el6_4.4                                         
  libcom_err-devel.x86_64 0:1.41.12-14.el6_4.2                                  
  libselinux-devel.x86_64 0:2.0.94-5.3.el6_4.1                                  
  libsepol-devel.x86_64 0:2.0.41-4.el6                                          

Complete!

Daha sonra Python 2.7-ni yenidən build etdim:

[root@localhost Python-2.7.5]# ./configure -with-zlib=/usr/include
[root@localhost Python-2.7.5]# make
[root@localhost Python-2.7.5]# make install

Və bir daha sınayaq:

(django-sh)[root@localhost bin]# pip install django
Downloading/unpacking django
Downloading Django-1.5.2.tar.gz (8.0MB): 8.0MB downloaded
Running setup.py egg_info for package django
.
.
Successfully installed django
Cleaning up...

Alındı 🙂
Ardınca yeni Django project yaradıb test edirik. Bunlar da Tutorial-da qeyd olunur:

(django-sh)[root@localhost bin]# django-admin.py startproject django_test
(django-sh)[root@localhost bin]# ls
activate       activate_this.py  easy_install      pip-2.7  python2.7
activate.csh   django-admin.py   easy_install-2.7  python
activate.fish  django_test       pip               python2
(django-sh)[root@localhost bin]# cd django_test/
(django-sh)[root@localhost django_test]# ls
django_test  manage.py

İlk django_test adlı proyektimizi yaratdıq. test üçün server-i run edek:

(django-sh)[root@localhost django_test]# python manage.py runserver
Validating models...

0 errors found
August 15, 2013 - 15:48:16
Django version 1.5.2, using settings 'django_test.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[15/Aug/2013 15:48:22] "GET / HTTP/1.1" 200 1962

http://127.0.0.1:8000/-ə gedərək sevinirik:

Kateqoriyalar: Linux, PHP/Python Etiketlər:

Installing Python 2.7.x and 3.3.x on CentOS 6.4

Avqust 14, 2013 2 şərh

2 versiya Python istifadə etməyimiz üçün onları ayrı-ayrı qurmaq lazımdır.
Ardıcıllıqla:

[root@localhost ~]# yum install gcc make
.
.
Installed:
  gcc.x86_64 0:4.4.7-3.el6                                                      

Dependency Installed:
  cloog-ppl.x86_64 0:0.15.7-1.2.el6                                             
  cpp.x86_64 0:4.4.7-3.el6                                                      
  glibc-devel.x86_64 0:2.12-1.107.el6_4.2                                       
  glibc-headers.x86_64 0:2.12-1.107.el6_4.2                                     
  kernel-headers.x86_64 0:2.6.32-358.14.1.el6                                   
  mpfr.x86_64 0:2.4.1-6.el6                                                     
  ppl.x86_64 0:0.10.2-11.el6                                                    

Complete!

Python-nun istədiyimiz versiyasını download edirik. İlk öncə 2.7 versiyanın qurulumu:

[root@localhost Downloads]# cd Python-2.7.5
[root@localhost Python-2.7.5]# ls
config.guess  Doc         LICENSE          Objects        Python
config.sub    Grammar     Mac              Parser         README
configure     Include     Makefile.pre.in  PC             RISCOS
configure.ac  install-sh  Misc             PCbuild        setup.py
Demo          Lib         Modules          pyconfig.h.in  Tools

[root@localhost Python-2.7.5]# ./configure
.
.
creating Modules/Setup
creating Modules/Setup.local
creating Makefile

[root@localhost Python-2.7.5]# make
[root@localhost Python-2.7.5]# make install

Və yoxlayaq:

[root@localhost ~]# python
Python 2.7.5 (default, Aug 15 2013, 21:36:59) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

Python 3.3 versiya üçün:

[root@localhost Python-3.3.2]# ./configure
[root@localhost Python-3.3.2]# make
.
.
gcc -pthread   -Xlinker -export-dynamic -o Modules/_testembed Modules/_testembed.o libpython3.3m.a -lpthread -ldl  -lutil   -lm

[root@localhost Python-3.3.2]# make install

Və yoxlayaq:

[root@localhost ~]# python3
Python 3.3.2 (default, Aug 15 2013, 21:57:56) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Təbriklər 😉

Kateqoriyalar: Linux, PHP/Python Etiketlər:

Using Connector/Python for MySQL

Python və MySQL üçün bir çox həllər mövcuddur lakin, rəsmi vasitə Connector/Python-dur.
Mənə əsasən də ERROR-arın native MySQL ERROR-lar olması xoşuma gəldi. Yəni programda baş verən error sanki terminalda işləyərkən baş verən error-dur. code number-lər da eynidir. Bilmirəm digər vasitələrdə bu var ya yox.
İLk öncə connector-u install edək. Məndə Ubuntu 12.04-dür və Python 2.7.3 və 3.3 install olunub.
Mənə lazımdır ki connector məhz Python 3.3-ə install olunsun.
Ardıcıllıqla:
1. Connector-u download edirik
2. daha sonra download direktorisində:

gunzip mysql-connector-python-1.0.9.tar.gz
tar mysql-connector-python-1.0.9.tar
cd mysql-connector-python-1.0.9
/opt/python3.3/bin/python3 setup.py install

İndi isə Python-la MySQL-ə qoşulaq.

import mysql.connector

try:
    conn=mysql.connector.connect(user='root', password='12345',host='localhost',database='python_test')

except mysql.connector.Error as err:
    if err.errno==mysql.connector.errorcode.ER_ACCESS_DENIED_ERROR:
        print(err)
        print("Something is wrong your username or password")
    elif err.errno==mysql.connector.errorcode.ER_BAD_DB_ERROR:
        print(err)
        print("Database does not exists")
    else:
        print(err)
else:
    conn.close()

Yuxarıda dediyim kimi ERROR-ların oxşarlığına baxaq.
root əvəzinə rot yazaq.
Python-dan:

1045 (28000): Access denied for user 'rot'@'localhost' (using password: YES)

MySQL terminaldan:

root@sh-ubuntu:~# mysql -u rot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'rot'@'localhost' (using password: YES)

Davam edək. database adında python_test yerinə pyton_test yazaq:
Python-dan:

1049 (42000): Unknown database 'pyton_test'

MySQL-dən:

mysql> use pyton_test;
ERROR 1049 (42000): Unknown database 'pyton_test'

MySQL native error-lardan daha gözəl nə ola bilər? 😉
Indi isə sadə insert və select edək.

import mysql.connector

try:
    conn=mysql.connector.connect(user='root', password='12345',host='localhost',database='python_test')
    
    cursor=conn.cursor()
    add_id=("insert into test_id values (%s),(%s),(%s),(%s)")
    
    ids=(1,2,3,4)
    cursor.execute(add_id,ids)
    conn.commit()
    
    
    query=("select id from test_id")
    cursor.execute(query)
    for ids in cursor:
        print(ids)
    
    cursor.close()

except mysql.connector.Error as err:
    if err.errno==mysql.connector.errorcode.ER_ACCESS_DENIED_ERROR:
        print(err)
        print("Something is wrong your username or password")
    elif err.errno==mysql.connector.errorcode.ER_BAD_DB_ERROR:
        print(err)
        print("Database does not exists")
    elif err.errno==mysql.connector.errorcode.ER_DUP_ENTRY:
        print(err)
        print("Check your values")
    else:
        print(err)
else:
    conn.close()

Bir daha run etsək çox tanış bir ERROR görəcik 🙂 Bu da MySQL ERROR-un eynisidir.

1062 (23000): Duplicate entry '1' for key 'PRIMARY'

ERROR handling-də adlar da çox oxunaqlıdır. ER_ACCESS_DENIED_ERROR , ER_BAD_DB_ERROR, ER_DUP_ENTRY
Təşəkkürlər!