ผมสร้างโปรแกรมบนระบบอูบุนตูที่มีโครงสร้างการเก็บโมดูลเป็นลักษณะนี้
PackageFolder/
__init__.py
runapp.py
Level_1_SubFolder/
__init__.py
mod1.py
mod2.py
Level_1_SubFolder/
__init__.py
mod3.py
mod4.py
ตอนที่ผมรันจาก runapp.py ที่อยู่ภายใน packagefolder ก็สามารถ import ใช้านได้ แต่หลังจากที่สร้าง debian package แล้วจะต้องแยกไฟล์ runapp.py ไปไว้ที่ /usr/bin ส่วนโมดูลอื่นๆ ก็ไปไว้ที่ /usr/share/myapp ปัญหาของผมจะแยกไว้เป็นข้อๆ นะครับ
รบกวนช่วยตอบด้วยนะครับ คำถามอาจจะดูงงๆ อยู่บ้าง ผมก็ไม่รู้จะอธิบายอย่างไรดีน่ะครับ ติดตรงนี้มาซักพักแล้วครับ
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ทำได้แล้วครับ ที่ผมแก้คือ fixed path ไปที่โฟลเดอร์แต่ละอันที่มีเลย แล้ว insert ไปไว้ใน sys.path ทีละตัวๆ
แต่ก็ยังไม่ถูกใจผมอยู่ดี
ถ้าผมต้องการที่จะ import แบบ
from SubFolder.Module import *
นี่ต้องทำอย่างไรบ้างครับ
runapp.py ควรอยู่นอก module แล้วก็เซ็ต PYTHONPATH="."
ทำถูกหมดแล้ว อย่างที่คุณ sugree ว่าครับ ขาดแต่ set PYTHONPATH ไม่งั้น ก็ทำ link ออกมาจาก site-package ของตัว python ไปเลย ถ้าไม่อยาก set PYTHONPATH อีก ;)
ขอบคุณมากครับสำหรับคำตอบ แล้วเคยมีใครเคยสร้าง debian package บ้างมั้ยครับ (หรือว่าผมควรตั้งกระทู้ใหม่ดี?)
ผมสร้างประจำ ง่ายมากๆ อ่านหลักการที่ http://debianclub.org/node/60
ขอคำแนะนำหน่อยครับ คือว่าผมสร้างแพคเก็จเสร็จเรียบร้อยแล้ว โดยผมติดตั้งไฟล์สำหรับรันไว้ที่ /usr/bin ส่วนไฟล์ข้อมูลผมจะเอาไว้ที่ /usr/share/myapp
ในไฟล์ rules ตรงส่วน install: build ของผมเป็นแบบนี้ครับ
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
mkdir -p $(CURDIR)/debian/myapp
# Insert commands
cp runapp.py $(CURDIR)/debian/myapp/usr/bin/runapp.py
# Install data files
mkdir -p $(CURDIR)/debian/myapp/usr/share/myapp
cp -r data/ $(CURDIR)/debian/myapp/usr/share/myapp/data
ที่บรรทัดสุดท้ายข้อมูลจะถูกติดตั้งไปที่ /usr/share/myapp/data
แต่โปรแกรมผมต้องเซฟข้อมูลกลับเข้าไปด้วยซึ่งมันติด permission เลยทำงานต่อไม่ได้
รบกวนด้วยนะครับถ้าโปรแกรมผมทำเป็นแพ็คเกจแต่โปรแกรมใช้ไม่ได้นี่คงอารมณ์ค้างมากๆ เลยครับ
ขอบคุณมากครับ
ที่ว่ามาไม่เกี่ยวกับ rules ครับ มันขึ้นกับโปรแกรมของเรา ซึ่งในกรณีนี้จะต้องเพิ่มลอจิกนิดหน่อย
เข้าใจแล้วครับขอบคุณมากนะครับ ^^
แล้วถ้าผมต้องการกำหนด path = $home/.myapp นี่จะเขียนใน python อย่างไรบ้างครับเซ่ออีกแล้วผม มันก็มี os.environ() อยู่นี่นา ^^
เปลี่ยนคำถามดีกว่าครับ แล้วผมจะตรวจสอบได้อย่างไรครับว่ามีโฟลเดอร์นี้อยู่และในโฟลเดอร์นี้มีข้อมูลอยู่edit: ผมลองไปอ่าน API ดูแล้วครับ มันจะมี os.path.exists(path), os.path.isdir(path) ไว้สำหรับหาว่ามี path นี้อยู่หรือไม่ ส่วนจะดูว่ามีข้อมูลอยู่หรือไม่ผมใช้ os.path.getsize(path)
แล้วถ้าผมต้องการก๊อปปี้ข้อมูลไปที่ path ที่ผมกำหนดจะทำใน python ได้อย่างไรบ้างครับ?
shlib ช่วยได้
ขอบคุณมากครับ (แล้วมันใช่ตัวเดียวกันกับ shutil รึเปล่าครับ?)
อ๊าก พิมพ์ผิด มือไว