Tags:
Forums: 

ผมลองสร้าง .egg ของ helloworld โดยสั่ง

python setup.py bdist_egg

จะำได้ไข่ helloworld-0.1dev-py2.4.egg ออกมา 1 ฟอง ครับ
ต่อไปลองสั่ง

easy_install helloworld-0.1dev-py2.4.egg

ก็จะมีการนำไข่ไปฟักไว้ยังที่เก็บ module ต่างๆ ของ python ตามนี้

/usr/lib/python2.4/site-packages/helloworld-0.1dev-py2.4.egg

แสดงว่าผมก็จะได้แค่ module ที่พร้อมใช้งานใช่มั้ยครับ
แล้วถ้าผมต้องการใ้ห้ได้เป็นโปรแกรม ที่อยู่ใน /bin หรือ /usr/bin ล่ะครับ
ผมควรสร้าง Dist ของโปรแกรมอย่างไรดีครับ

เพิ่งเริ่ม def งานด้วย python ไม่นานครับ

Get latest news from Blognone
By: ix on 16 June 2009 - 14:31 #108753

ไม่รู้ผมถามให้งง กันหรือว่าอย่างไร
ไปเจอ กระทู้นี้มา

http://www.codenone.com/node/838

และตามไปอ่านต่อที่ http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation ตามคำแนะนำ
ก็ได้เข้าใจว่า เขียน setup.py ง่ายๆ แค่กำหนดค่า 'console_scripts' ไว้เท่านั้นเอง ก็จะได้ command line ของ app ของเราเองแล้ว

เช่น mypackage ของผม

find .

./mypackage
./mypackage/hello.py
./mypackage/init.py
./mypackage/mypackage.py
./mypackage.egg-info
./mypackage.egg-info/dependency_links.txt
./mypackage.egg-info/entry_points.txt
./mypackage.egg-info/not-zip-safe
./mypackage.egg-info/PKG-INFO
./mypackage.egg-info/top_level.txt
./mypackage.egg-info/SOURCES.txt
./setup.cfg
./setup.py

File:./mypackage/hello.py

!/usr/bin/env python2.6

def say_func():
print "hello Test"

File:./mypackage/mypackage.py

!/usr/bin/env python2.6

def main_func():
print "run in main function:"

File:./setup.py

from setuptools import setup, find_packages
import sys, os

version = '0.0'

setup(name='mypackage',
version=version,
description="",
long_description="""\
""",
classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
keywords='',
author='',
author_email='',
url='',
license='',
packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
include_package_data=True,
zip_safe=False,
install_requires=[
# -- Extra requirements: --
],
entry_points={
'console_scripts':[
'mypack = mypackage.mypackage:main_func',
'myhello= mypackage.hello:say_func',
]
},
)

เวลาสั่ง install ก็จะเห็นแบบนี้

...
Installing myhello script to /usr/local/bin
Installing mypack script to /usr/local/bin
...

นั้นคือเราจะได้ โปรแกรม myhello, mypack พร้อมสั่งรันได้เลย ^__^