2012-11-14 37 views
7

Có cách nào để ngăn chặn python tạo tệp .pyc, đã có trong shebang (hoặc số ma thuật nếu bạn muốn) của tập lệnh Python không?Dừng Python tạo tệp pyc trong shebang

Không làm việc:

#!/usr/bin/env python -B 
+1

@VajkHermecz, không có câu hỏi của tôi là nhiều cụ thể hơn. –

+0

Vâng, xin lỗi có liên quan sẽ là một thuật ngữ tốt hơn ... srry –

+1

Bỏ phiếu để mở lại vì nó có những tác động khác với bản sao. – o11c

Trả lời

4

Vâng, khi và chỉ khi, chúng tôi giả định các chương trình Python chạy trong một hệ thống tương thích phần nào POSIX (cho/bin/sh), điều này sẽ làm việc:

(CẢI THIỆN dựa trên đầu vào từ glglgl)

#!/bin/sh 
"exec" "python" "-B" "$0" "[email protected]" 

# The rest of the Python program follows below: 
+0

Lưu ý: sau này cải tiến với http://stackoverflow.com/a/9057699/193892 –

+0

Có vẻ tuyệt vời! '' 'S dành cho shell và bị bỏ qua bởi python ... – glglgl

+1

Nhưng nó phá vỡ cú pháp tô sáng ... – glglgl

3

Than ôi, không có. Các công cụ shebang được giới hạn cho việc thực thi và một tham số.

Vì vậy, env cố gắng thực thi python -B với tệp đã cho làm đối số thay vì python với -B và tệp hiện tại làm hai đối số.

Tôi không thấy cách nào để đạt được mục tiêu mong muốn.

+2

Phần thú vị là Python Windows Launcher không biết về giới hạn này và chuyển các tùy chọn (un) một cách chính xác. Vì vậy, một khi Python trên Window hoạt động tốt hơn;) – lqc

6

có thể bằng cách đặt đường dẫn interperter python của bạn trực tiếp trong bang thay vì sử dụng env.

#!/usr/bin/python -B 

Tất nhiên điều này có nghĩa là bạn sẽ mất một số lợi ích về tính di động khi sử dụng env. Có một cuộc thảo luận về vấn đề này với env trên wikipedia Shebang page. Họ sử dụng python như một trong những ví dụ env của họ.

4

Theo trang người dùng cho env, bạn có thể vượt qua name=value để đặt biến môi trường. Biến môi trường PYTHONDONTWRITEBYTECODE làm cho Python không ghi các tệp .py [co] (giống như cờ -B thành python). Vì vậy, sử dụng

#!/usr/bin/env PYTHONDONTWRITEBYTECODE=1 python 

nên thực hiện thủ thuật.

EDIT:

Tôi đã thử nghiệm điều này với một kịch bản Python đơn giản:

#!/usr/bin/env PYTHONDONTWRITEBYTECODE=1 python 
print 1 

sau đó

$chmod +x test.py 
$./test.py 
1 
$ls 
test.py 

(nhưng không test.pyc)

+1

Đối với tôi tập lệnh chỉ bị treo ... –

+0

Tính năng này có hoạt động chỉ với 'python -B script.py' không? Tôi chỉ thử nghiệm một kịch bản đơn giản, và nó dường như làm việc tốt với tôi. – asmeurer

+1

tôi nữa. điều này dường như không hoạt động. –

Các vấn đề liên quan