Tôi có một chương trình nhỏ trong python bao gồm một tệp .py cùng với thư mục tệp dữ liệu được chương trình sử dụng.Kịch bản cài đặt thích hợp cho một chương trình Python nhỏ (Không phải mô-đun) trong Linux
Tôi muốn biết cách thích hợp để tạo thủ tục cài đặt cho người dùng có quyền quản trị trên Linux để có thể cài đặt chương trình trên hệ thống của mình và sử dụng nó từ dòng lệnh, với các tùy chọn và tham số. EDIT: Phần tôi gặp sự cố với là có chương trình, sau khi cài đặt, truy xuất các tệp dữ liệu, chứa trong thư mục con 'dữ liệu'.
Tập lệnh thiết lập có cài đặt tệp chương trình thực thi trong /usr/local/bin
và thư mục dữ liệu trong /usr/share/my_program/data
là giải pháp có thể chấp nhận được không? Một cái gì đó như:
#!/bin/bash
# Launch with sudo
chmod +x program.py
cp program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation complete
Bây giờ, để làm được điều đó, tôi phải thừa nhận, trong chương trình, rằng các tập tin dữ liệu sẽ được trong /usr/share/my_program/data
. Nhưng tôi cũng sẽ để người dùng lựa chọn sử dụng chương trình mà không cần cài đặt nó. Sau đó, tôi sẽ phải giả định rằng dữ liệu nằm trong './data', liên quan đến tệp chương trình thực thi. Tôi nên giải quyết vấn đề này như thế nào? Tôi có thể nghĩ ra một vài cách, nhưng cảm giác của tôi là tôi đang tạo ra một mớ hỗn độn, nơi có một câu trả lời rõ ràng và chính xác.
Hiện nay, tôi đang xem xét sử dụng một thử except:
try:
find data from /usr/share/my_program && set path accordingly
except:
set path to the data as './data'
lần nữa, tôi cảm thấy đó là một chút phức tạp. Bạn sẽ tiến hành cài đặt bằng cách nào?
Rất cám ơn
EDIT: GIẢI PHÁP NUÔI
Dựa trên câu trả lời của câu hỏi này, và cho những người trong câu hỏi được đề xuất bởi FakeRainBrigand (How to know the path of the running script in Python?), tôi đã tạo ra một cài đặt kịch bản như sau:
#!/bin/bash
mkdir /usr/share/my_program
chmod +x my_program.py
cp my_program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation completed
Và thêm mã sau vào chương trình của tôi:
if os.path.dirname(__file__) == "/usr/local/bin":
DATA_PATH = "/usr/share/my_program/data"
elif os.path.dirname(__file__) == ".":
DATA_PATH = "./data"
else:
print "You do not have a working installation of my_program"
print "See the installation procedure in the README file"
sys.exit(1)
Sau đó, tôi sử dụng os.path.join(DATA_PATH, "file-to-reach.txt")
để chương trình có thể truy cập dữ liệu của nó, được tìm thấy trong /usr/share/my_program
.
Tôi rất vui khi có ý kiến nếu có phương thức được chấp nhận hơn.
Cheers
'make' không chỉ đơn thuần là C, nhưng có thể cảm thấy lạc hậu trong chương trình Python. – sarnold