Tất cả tài liệu cho các cuộc thảo luận Pyinstaller về việc bao gồm các tệp riêng lẻ. Có thể bao gồm một thư mục hay tôi nên viết một hàm để tạo mảng bao gồm bằng cách duyệt qua thư mục bao gồm của tôi?Bao gồm một thư mục sử dụng Pyinstaller
Trả lời
Tôi ngạc nhiên rằng không có ai đề cập đến lựa chọn chính thức hỗ trợ sử dụng Tree()
:
https://stackoverflow.com/a/20677118/2230844
https://pythonhosted.org/PyInstaller/advanced-topics.html#the-toc-and-tree-classes
Còn việc sử dụng glob
thì sao?
from glob import glob
datas = []
datas += glob('/path/to/filedir/*')
datas += glob('/path/to/textdir/*.txt')
...
a.datas = datas
Dán tệp sau đây vào một thư mục đệ quy và thêm tất cả các tệp vào thư mục để phân phối.
##### include mydir in distribution #######
def extra_datas(mydir):
def rec_glob(p, files):
import os
import glob
for d in glob.glob(p):
if os.path.isfile(d):
files.append(d)
rec_glob("%s/*" % d, files)
files = []
rec_glob("%s/*" % mydir, files)
extra_datas = []
for f in files:
extra_datas.append((f, f, 'DATA'))
return extra_datas
###########################################
# append the 'data' dir
a.datas += extra_datas('data')
Excuse me, nhưng tôi không thực sự có được nó. Tôi có một thư mục có tên là '~/Scripts'. Dữ liệu của tôi được lưu trữ trong '~/Scripts/Data'. Tôi có nên thay thế 'a.datas + = extra_datas ('dữ liệu')' bằng 'a.datas + = extra_datas ('Dữ liệu')'? –
Nếu kịch bản pyInstaller của bạn cũng nằm trong 'Scripts' và bạn gọi nó bằng' python mybuildscript.py' từ bên trong 'Scripts' thì có, bạn nên thay thế bằng' Data', nếu không sử dụng '.' và' ..' để điều hướng cây thư mục. – styts
Cảm ơn bạn đã chia sẻ, sử dụng [lớp Cây] (https://pythonhosted.org/PyInstaller/advanced-topics.html#the-tree-class) đã giải quyết nó cho tôi một cách thanh lịch. Bây giờ tôi chỉ cần một dòng này: 'a.datas + = Tree ('./ dir_to_include', prefix = 'dir_to_include')' – sunyata
yep, tôi nghĩ rằng nó chỉ là không được tài liệu đủ tốt, nhưng nguồn mở này, vì vậy PR được chào đón :) – denfromufa