Tags:
Forums: 

ผมลองทำการติดตั้งdjango บน ubuntu8.10 ตามลิ้งhttp://cviorel.easyblog.ro/2009/04/09/install-django-on-ubuntu-810/ แต่ว่าพอเรียก django-admin.pyแล้วมันขึ้นว่า bash:django-admin.py:command not found `พวกพี่ๆติดตั้งกันแบบไหนเหรอครับถึงใช้งานได้ ขอละเอียดนิดนึงนะครับขอบคุณครับ

Get latest news from Blognone
By: cwt
AndroidRed Hat
on 1 May 2009 - 18:11 #99335

ตามไปดูแล้วครับ นั่นเป็นวิธีการลงที่ ผิดมากๆ ครับ

หลังจาก load Django-1.0.2-final.tar.gz มาแล้ว

  • tar zxf Django-1.0.2-final.tar.gz
  • cd Django-1.0.2-final
  • python setup.py build
  • sudo python setup.py install --optimize=1

พอดีต้องออกไปธุระข้างนอก ไว้คืนนี้จะกลับมาอธิบายว่า ผิด อย่างไร และทำไมต้องลงแบบนี้

By: darktong
ContributorAndroidUbuntu
on 1 May 2009 - 18:49 #99340

sudo apt-get install python-django

By: cwt
AndroidRed Hat
on 2 May 2009 - 00:25 #99381

กลับมาอธิบายต่อ

วิธีลงตามคุณ darktong น่าจะเป็นวิธีที่ดีที่สุดถ้าต้องการให้ระบบ package manager ของ ubuntu ช่วยจัดการ แต่ในบางครั้งเราอาจจะต้องการลง version ที่ใหม่กว่าที่มีใน repository (ในกรณี 8.10 นี้ผมไม่ทราบจริงๆ ว่าที่มีใน repository มันเป็น version อะไร เพราะผมใช้ fedora) และในหลายๆ กรณี เราต้องการที่จะลงแบบ fix version เดิมตลอดไม่ว่าจะลงกี่ครั้ง/เมื่อไหร่ เช่นการ deploy ใน production server ดังนั้นการลงจาก release file .tar.gz ก็จะเป็นทางเลือกที่ดีกว่า

แต่ในการลง python application หรือ library นั้น เราไม่ควรที่จะทำอย่างที่เขียนไว้ในนี้ http://cviorel.easyblog.ro/2009/04/09/install-django-on-ubuntu-810/ เนื่องจากเราจะไปยุ่งวุ่นวายกับ python path และ library รวมถึงโครงสร้างของ directory (folder) ถึงแม้ว่าจะอยู่ใน /usr/local ซึ่งเป็นที่ๆ อนุญาติให้ทำอะไรๆ ได้ด้วยตัวเอง แต่ก็เป็นวิธีการที่ไม่สมควรทำอยู่ดี เนื่องจากเราไม่รู้ว่าผู้สร้าง Django ต้องการให้ตระเตรียมอะไรให้กับระบบก่อนหรือไม่ (เช่นการ chmod, chown หรืออาจจะมี C library ที่ต้อง compile ก่อน) ดังนั้นใน python library หรือ application ส่วนใหญ่ (เกือบทั้งหมด) จะเตรียม setup.py มาให้เพื่อให้เราสามารถลงได้อย่างง่ายๆ โดยมี permission และ owner เป็นไปตามที่ผู้สร้าง library นั้นๆ ต้องการ รวมถึงการจัดวาง tools หรือคำสั่งต่างๆ ลงในที่ๆ ควรอยู่ อย่างในตัวอย่างของคุณ nanartong ที่ไม่สามารถเรียกใช้ django-admin.py ได้เนื่องจากมันไม่ได้อยู่ใน path ของระบบ

อีกเรื่องคือโอกาสที่จะทำให้ library ทำงานช้าลงกว่าเดิม เช่นตาม web ที่ให้มานั้นได้ทำการ copy Django ไปด้วยตัวเอง โดยไม่ได้ผ่านการเรียก setup.py ดังนั้น file .py ทั้งหลายจะไม่ได้ถูก compile เป็น byte code ทำให้เวลาเรียกใช้งาน python จะต้อง compile ใหม่ทุกครั้ง ซึ่งถ้า permission และ owner ยังเป็นของคนที่จะเรียกใช้งานก็โชคดีไปเพราะครั้งแรกที่เรียกใช้อาจจะสามารถเขียน byte code (.pyc) ลงไปได้ แต่ถ้าไม่สามารถเขียนได้ มันก็จะยังคงเป็น .py และทุกครั้งที่ใช้งานจะต้องเสียเวลา compile ดังที่กล่าวข้างต้น

อธิบาย บรรทัดสุดท้ายที่ให้สั่ง sudo python setup.py install --optimize=1 อันนี้จะเห็นได้ว่ามีการสั่งให้ optimize ด้วย ดังนั้น setup.py จะสร้าง .pyc และ .pyo ให้ตั้งแต่ตอนที่ลงเลย ดังนั้นเมื่อใช้งานด้วย option -O (python -O) จะไม่เสียเวลา compile อีก

By: nanartong on 3 May 2009 - 16:41 #99740

ขอบคุณมากๆเลยครับจะลองดูนะครับ

By: nanartong on 3 May 2009 - 17:31 #99747

ขอบคุณพี่ cwt และdraktong มากๆเลยครับติดตั้งได้แล้วครับ ขอถามอีดนิดนะครับ
python setup.py build คำสั่งนี้คืออะไรเหรอครับ

By: cwt
AndroidRed Hat
on 3 May 2009 - 21:02 #99766

คล้ายๆ กับการ compile source code น่ะครับ จริงๆ แล้วมันทำอะไรหลายอย่างตามแต่ที่คนสร้าง package จะอยากให้มันทำ เช่นใน library บางตัวจะมีการเรียกใช้งาน extension ที่เขียนด้วยภาษา C ตอนสั่ง build มันก็จะ compile พวกนี้ให้

ใน howto บางเว็บ ก็จะบอกให้ setup.py install ไปเลย เพราะมันก็จะ build ให้อยู่แล้ว แต่ผมชอบ build เองก่อนทีละ step (เป็นความชอบส่วนตัว)

By: airries on 24 May 2009 - 14:55 #104377

เวลา build ใช้เป็น user ปกติ เราจะได้มีสิทธิลบได้
เช่น

python setup.py build

แล้วค่อย เป็นรูท อินสตอล

sudo python setup.py install

ถ้าเรา ไม่สั่ง build ก่อน มันจะบิลต์ในฐานะรูท เวลามาลบ แพกเกจทิ้ง ต้องมาลบเป็นรูท อีก