Tôi đã nghiên cứu chủ đề này thêm một chút. Tôi bắt đầu từ số tuyên bố của techtonik - Câu trả lời rất đơn giản - không ai triển khai nó. Điều này tuy nhiên, đặt ra một câu hỏi khác - tại sao không ai thực hiện nó? Tôi nghi ngờ câu trả lời là bởi vì nó hoạt động. Điều này dẫn đến một câu hỏi khác - tại sao nó hoạt động?
Lý do mọi thứ hoạt động mà không cần DLLs
thư mục được sao chép vào virtualenv là
- Python tìm kiếm
sys.path
tìm thấy bất kỳ dll nó cần
sys.path
sau khi kích hoạt virtualenv chứa đường dẫn đến bản gốc DLLs
thư mục
Câu lệnh đầu tiên có thể được kiểm tra đơn giản bằng cách xóa đường dẫn đến DLLs
thư mục từ sys.path
và cố nhập mô-đun select
(mô-đun này cần select.pyd
tệp từ thư mục DLLs
) mà sau đó không thành công.
Trong nhận xét bạn nói Tôi muốn giữ các tệp DLL của mô-đun Python trong môi trường ảo cùng với mã Python. Có thể bằng cách sao chép DLLs
thư mục vào virtualenv. Lý do hoạt động này là sys.path
sau khi kích hoạt virtualenv cũng chứa đường dẫn đến thư mục DLLs
bên trong virtualenv (mặc dù không có thư mục nào được tạo khi tạo virtualenv). Đường dẫn này được đặt trước đường dẫn đến thư mục DLLs
gốc có nghĩa là nó được tìm kiếm trước tiên và do đó ghi đè thư mục DLLs
gốc.
Tôi đã đăng câu hỏi có tiêu đề DLLs folder on Windows tại danh sách gửi thư của Python.
Nguồn
2013-01-16 13:32:25
"sys.path sau khi kích hoạt virtualenv chứa đường dẫn đến thư mục DLL gốc" Tôi không 'kích hoạt' env của mình, và nó cũng chứa đường dẫn đến thư mục DLL gốc trong 'sys.path'. Tôi có hiểu lầm bạn không? – cubuspl42
* (...) 'sys.path' sau khi kích hoạt của virtualenv chứa ** cũng ** đường dẫn đến thư mục' DLLs' bên trong virtualenv (...) * Nếu không có virtualenv được kích hoạt 'sys.path' chứa đường dẫn đến * DLLs * thư mục từ cài đặt của Python. Sau khi virtualenv được kích hoạt 'sys.path' chứa ** cả ** đường dẫn - đến thư mục * DLLs * của virtualenv và cũng vào thư mục * DLLs * từ cài đặt của Python. –