Tôi có một số mã mà tải một tập tin cấu hình mặc định và sau đó cho phép người dùng để cung cấp các file Python của mình như cấu hình thêm bổ sung hoặc ghi đè các giá trị mặc định:Python: execfile từ thư mục làm việc của tệp khác?
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
Có một vấn đề, mặc dù: execfile()
thực hiện chỉ thị trong tệp được chỉ định bởi cfg_path
như thể nó nằm trong thư mục làm việc của foo.py
, không phải thư mục làm việc của riêng nó. Do đó, import
chỉ thị có thể không thành công nếu tệp cfg_path
, chẳng hạn như from m import x
trong đó m
là một mô-đun trong cùng một thư mục với tên cfg_path
.
Làm cách nào để execfile()
từ thư mục hoạt động của đối số của nó hoặc đạt được kết quả tương đương? Ngoài ra, tôi đã nói rằng execfile
không còn được dùng trong Python 3 và tôi nên sử dụng exec
, vì vậy nếu có cách nào tốt hơn tôi nên làm điều này, tôi là tất cả các tai.
Lưu ý: Tôi không nghĩ rằng các giải pháp chỉ thay đổi thư mục hoạt động là chính xác. Điều đó sẽ không đặt các mô-đun đó vào đường dẫn tìm kiếm mô-đun của trình thông dịch, theo như tôi có thể nói.
Cảm ơn câu trả lời của bạn. Thật không may, điều này dường như không làm việc cho tôi. 'execfile()' dường như đang khởi chạy một tiến trình hoàn toàn mới với thư mục làm việc riêng của nó, nó không giống như thư mục tôi đang khởi chạy. –
Không, @Kyle, 'execfile' không khởi chạy một quá trình riêng biệt, và nó ** không tôn trọng thư mục làm việc hiện tại. Chỉnh sửa câu trả lời của tôi để hiển thị một ví dụ đơn giản chứng minh rằng bạn đã sai. –