วันพุธที่ 1 เมษายน พ.ศ. 2558

pip install error registry บน windows (Python 2.7.9)

ผู้เขียนได้ติดตั้ง pip เสร็จสิ้นเรียบร้อยแล้ว หลังจากนั้นจะติดตั้ง package อื่นๆต่อ (ในที่นี้ขอยกตัวอย่างเป็น pyramid)
แต่ปรากฏว่าเมื่อติดตั้งโดยใช้ pip โดยคำสั่งด้านล่างก็เกิด Error ฟ้องขึ้น

c:\> python -m pip install pyramid

โดยฟ้อง Error ประมาณว่า

File "C:\Python27\lib\mimetypes.py", line 263, in read_windows_registry
with _winreg.OpenKey(hkcr, subkeyname) as subkey:
TypeError: must be string without null bytes or None, not str

เนื่องจาก python มีปัญหากับ Registry บางตัวบน Windows 64 bit
วิธีการแก้ไขมีหลายวิธี ผู้เขียนจึงนำเสนอวิธีที่ผู้เขียนใช้ได้ผล
ซึ่งวิธีอื่นๆสามารถไปอ่านเพิ่มเติมได้ที่ลิง้ค์ข้างล่าง

Thank you for the solution from
http://www.swarley.me.uk/blog/2014/04/23/python-pip-and-windows-registry-corruption/

วิธีการแก้ไขคือ ให้เปิดไฟล์ python27\Lib\mimetypes.py ขึ้นมาแก้ไข
โดยเพิ่มบรรทัดที่มี #new อยู่ข้างหลัง ตามโค้ดด้านล่าง

with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
    for subkeyname in enum_types(hkcr):
        try:
            if '\0' in subkeyname: # new
                print "Skipping bad key: %s" % subkeyname # new
                continue # new
            with _winreg.OpenKey(hkcr, subkeyname) as subkey:

หลังจากนั้นก็ Save แล้วก็ลอง install ใหม่ดู
จะพบว่า หลังจากติดตั้งจะมีการ Skip key ไปบางส่วนทำให้ติดตั้งได้ ดังรูป


ก็จะติดตั้งได้เสร็จสิ้นเรียบร้อย

Read more

How to install Python 2.7.9 (Compile from source)

อันดับแรกติดตั้ง Package ที่ใช้ในการ Compile ก่อน

$sudo apt-get install build-essential
$sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

หลังจากนั้นก็ไปโหลด Python มาจากเว็บ Python.org
และก็แตกไฟล์ให้เรียบร้อยโดย
$tar -xvf Python-2.7.9.tgz
$cd Python-2.7.9

หลังจากนั้นสั่งตั้งค่าและ Compile
$./configure
$make
$sudo make install

Finish !

แถมอีกนิด สำหรับคนต้องการลง pip และ virtualenv
โดยปกติ python 2.7.9 จะแถม pip มาให้เลย ก็ไม่เข้าใจเหมือนกันว่าทำไมของผู้เขียนทำไมไม่ติดตั้งมาให้
ติดตั้ง pip โดยไปโหลด get-pip.py จาก 
https://pip.pypa.io/en/latest/installing.html#install-pip

โหลดเสร็จแล้วก็

$sudo python get-pip.py

หลังจากติดตั้งเสร็จสิ้นเรียบร้อยแล้ว ก็ตามด้วย virtualenv

$sudo python -m pip install virtualenv

เสร็จเรียบร้อยจ้า




Read more