Bỏ chế độ cài đặt đóng gói egg trong python

Khi chạy python với công cụ IDE. Có một số thư viện đã được cài đặt.

Tuy nhiên, IDE lại không tìm thấy mã nguồn để thực hiện autocomplete.

Sau một hồi tìm hiểu, tôi xác định được nguyên nhân là do có một số thư viện được cài dưới dạng .egg

nên phát sinh tình huống như vậy.

Cách để bỏ chế độ đóng gói khi cài bằng pip hoặc easy_install

sửa file pydistutils.cfg trong thư mục “$PYTHON_PATH/lib/python2.7/distutils”

thêm dòng sau:

zip_ok = false

Nếu không được có thể dùng lệnh

easy_install -Z <tên-thư-viện>

Advertisements

Sử dụng Cache Pip Downloads trong Python

Khi sử làm việc với Python trên môi trường virtualenv và pip. Ta cần cài đặt một gói thư viện python, ta có thể tạo thư mục cache để pip tìm trong thư mục đó trước khi lên mạng để giảm thời gian download và công việc cài đặt sẽ nhanh hơn:
$ vi .bash_profile
thêm dòng sau:
export PIP_DOWNLOAD_CACHE=$HOME/.pip-download-cache

Tiếng Việt trong Django model phiên bản 1.4

Mình theo tài liệu này để hiển thị tên Model trong phần quản trị của Django
https://docs.djangoproject.com/en/1.4/topics/i18n/translation/
của Django. Tuy nhiên, mình thấy dài dòng quá, đọc rất mất thời gian.
Mình tóm tắt lại như sau:

Bước 1,
Vào settings.py, đổi, hoặc thêm mới:
    LANGUAGE_CODE = ‘vi-vn’
    LOCALE_PATHS = (‘PATH_TO_LOCALE’,)
    USE_I18N = True

Bước 2:
Với mỗi Model
Thêm class Meta  với các trường thuộc tính
    verbose_name
    verbose_name_plural
Thêm verbose_name vào trường thuộc tính.
Ví dụ: name = models.CharField(max_length=128, verbose_name=_(“Category name”))

Bước 3,

Đứng tại thư mục  gốc của project
Tạo một thư mục là “locale”. Sau đó, chạy lệnh sau
$django-admin.py makemessages -l vi
Lệnh này sẽ tự động sinh ra file
locale/vi/LC_MESSAGES/django.po

Bước 4,
Mở file bằng PlainText Editor (Notepad++, EmEditor, …), dịch.
Chạy lệnh sau để complile thành file django.mo :
$django-admin.py compilemessages

Giới thiệu cơ bản về Decorator trong Python (Phần 1)

Trong ngôn ngữ Python, lập trình viên có thể làm được những thứ rất hay ho với “Functions”. Thực tế, “functions” là first-class objects, có nghĩa là bạn có thể làm gì với kiểu strings, integers, … thì bạn có thể làm được như vậy với Functions. Ví dụ, bạn có thể gán một Functions với một biến:
>>> def square(n):
... return n * n
>>> square(4)
16
>>> alias = square
>>> alias(4)
16

Sức mạnh thực sự của Functions đến từ việc Function được coi như first-class object. Như vậy một Functions có thể chập nhận một function khác làm biến đầu vào, và trả ra một function. Ví dụ, một hàm có sẵn trong Python là hàm map, bạn có thể truyền vào một list
và trả ra một list mới bằng cách gọi một hàm khác tương tác với từng phần tử trong list:
>>> numbers = [1, 2, 3, 4, 5]
>>> map(square, numbers)
[1, 4, 9, 16, 25]

Khi một function được truyền vào và gọi đến một function khác được gọi là Higher-order_function.
Ta có thể dùng Higher-order_function để thay đổi hành vi của Function khác.

“Decorators” được áp dụng từ Python 2.4 dùng để đóng gói Function (Higher-order-function). Cách thông thường để áp dụng Higher-order-function trước khi sử dụng Decorators như sau:
>>> class WhatFor(object):
... def it(cls):
... print 'work with %s' % cls
... it = classmethod(it)
... def uncommon():
... print 'I could be a global function'
... uncommon = staticmethod(uncommon)
...

Cú pháp như trên sẽ trở nên khó đọc khi mã nguồn phức tạp. Vì vậy, Decorators được sử dụng giúp cú pháp trong sáng hơn:
>>> class WhatFor(object):
... @classmethod
... def it(cls):
... print 'work with %s' % cls
... @staticmethod
... def uncommon():
... print 'I could be a global function'
...

>>> this_is = WhatFor()
>>> this_is.it()
work with
>>> this_is.uncommon()
I could be a global function

(Tôi sẽ trình bày tiếp trong phần sau …)

Tham khảo:
1, PythonDecoratorLibrary
2,Understanding Python decorators
3, Class decorators vs function decorators

Cài đặt môi trường phát triển Python trên Windows với SetupTool, Pip

Đôi khi, việc cài đặt các mô đun Python trên môi trường Windows gặp rất nhiều trục trặc, gây mất thời gian.
Như đã từng gặp khi cài psycopg2 ở bài viết trước. Bạn có thể sửa lỗi đó bằng cách sau:
python setup.py build –compiler=mingw32 install

Tuy nhiên, nếu bạn muốn cài đặt mô đun sử dụng các công cụ easy_install hoặc pip và file requirements.txt trong môi trường virtualenv thì sao?

Bạn có thể làm theo các bước sau:
1. Cài đặt MinGw gồm cả gcc và các công cụ khác của linux.

2: Thêm đường dẫn C:\\MinGw\bin vào biến môi trường PATH.
Kiểm tra bằng cách
>echo %PATH%
3. Nếu bạn sử dụng phiên bản Python cũ hơn 2.6.6, bạn phải thiết đặt bằng tay biến môi trường HOME.
4. Trong thư mục C:\Users\Admin (Ở đây Admin là tên tài khoản bạn đang dùng, đối với WindowsXP, bạn thay đổi đường dẫn thành C:\\Documents and Settings\[tên tài khoản tương ứng]), tạo một file tên là pydistutils.cfg và copy đoạn dưới đây:

[build]
compiler = mingw32

Chú ý: Khi tạo virtualenv bạn phải có tham số –distribute (tôi cũng chưa hiểu tại sao???)
>virutualenv –distribute –no-site-packages [đường dẫn thư mục cần tạo]

Như vậy, bạn có thể dùng pip và easy_install để cài đặt những gói như: gevent, Twisted, SimpleJson…

Have fun!

Sửa lỗi cài đặt psycopg2 trên windows: ImportError: DLL load failed:

1.Thêm vào biến môi trường PATH …\PostgrSQL\9.0\bin và … \PostgrSQL\9.0\lib
2. Cài đặt mingw
3. download psycopg2
4. Chỉnh sửa file setup.cfg trong thư mục psycopg2, thêm dòng sau:
pg_config=C:\Program Files\PostgreSQL\9.0\bin\pg_config.exe
5. setup.py build -c mingw32
6. setup.py install

Tạo webserver chỉ bằng một dòng lệnh

Đôi lúc bạn muốn chia sẻ file trong mạng LAN ngay lập tức bạn có thể dùng lệnh từ python hoặc ruby để chạy webserver.

1. Bật Cmd lên.
2. chuyển đến thư mục cần chia sẻ
3. Gõ:

Python 2:

$python -m SimpleHTTPServer

Python 3:

$python3 -m http.server

Đối với Ruby

$ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"

Vậy là người khác trong mạng LAN có thể truy cập được vào máy của bạn với địa chỉ:
http:// [ IP của máy bạn]:8000/