Tệp __main__.py
là gì, loại mã nào tôi nên đưa vào đó và khi nào tôi nên có mã?__main__.py là gì?
Trả lời
Thông thường, một chương trình Python được điều hành bằng cách đặt tên file py trên dòng lệnh:
$ python my_program.py
Bạn cũng có thể tạo một thư mục hoặc zipfile đầy đủ các mã, và bao gồm một __main__.py
. Sau đó, bạn chỉ có thể đặt tên cho thư mục hoặc zipfile trên dòng lệnh, và nó thực thi __main__.py
tự động:
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Bạn sẽ phải tự quyết định xem ứng dụng của bạn có thể được hưởng lợi từ được thực thi như thế này.
__main__.py
được sử dụng cho các chương trình python trong các tệp zip. Tệp __main__.py
sẽ được thực thi khi tệp zip chạy. Ví dụ, nếu file zip là như vậy:
test.zip
__main__.py
và các nội dung của __main__.py
là
import sys
print "hello %s" % sys.argv[1]
Sau đó, nếu chúng ta chạy python test.zip world
chúng tôi sẽ nhận được hello world
ra.
Vì vậy, tệp __main__.py
chạy khi python được gọi trên tệp zip.
Nếu tập lệnh của bạn là thư mục hoặc tệp ZIP thay vì tệp python đơn, __main__.py
sẽ được thực thi khi "tập lệnh" được chuyển làm đối số cho trình thông dịch trăn.
Bạn tạo __main__.py
trong yourpackage
để làm cho nó thực thi như:
$ python -m yourpackage
file
__main__.py
là gì?
Khi tạo mô-đun Python, thông thường mô đun thực thi một số chức năng (thường chứa trong hàm main
) khi chạy làm điểm nhập của chương trình. Điều này thường được thực hiện với sự thành ngữ phổ biến sau đây được đặt ở dưới cùng của hầu hết các file Python:
if __name__ == '__main__':
# execute only if run as the entry point into the program
main()
Bạn có thể nhận được ngữ nghĩa tương tự cho một gói Python với __main__.py
. Đây là một dấu nhắc shell linux, $
, nếu bạn không có Bash (hay cách khác Posix vỏ) trên Windows chỉ tạo ra các tệp này demo/__<init/main>__.py with contents in between the
EOF`s:
$ mkdir demo
$ cat > demo/__init__.py << EOF
print('demo/__init__.py executed')
def main():
print('main executed')
EOF
$ cat > demo/__main__.py << EOF
print('demo/__main__.py executed')
from __init__ import main
main()
EOF
(Trong một vỏ Posix/Bash, bạn có thể làm như trên mà không có << EOF
s và kết thúc EOF
s bằng cách nhập tổ hợp phím Ctrl-D, nhân vật end-of-file, ở phần cuối của mỗi lệnh cat)
và bây giờ:
$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed
Bạn có thể lấy được từ tài liệu này ion.Các documentation nói:
__main__
- môi trường kịch bản cấp cao nhất
'__main__'
là tên của phạm vi trong đó mã cấp cao nhất thực hiện. Mô-đun__name__
của mô-đun được đặt bằng'__main__'
khi đọc từ đầu vào tiêu chuẩn , tập lệnh hoặc từ lời nhắc tương tác.Một mô-đun có thể khám phá hay không nó đang chạy trong phạm vi chính bằng cách kiểm tra riêng
__name__
của nó, cho phép một thành ngữ phổ biến đối với có điều kiện thực thi mã trong một module khi nó được chạy như một kịch bản hay vớipython -m
nhưng không phải khi nó được nhập khẩu:if __name__ == '__main__': # execute only if run as a script main()
Đối với một gói, tác dụng tương tự có thể đạt được bằng cách bao gồm một module
__main__.py
, nội dung trong đó sẽ được thực hiện khi các mô-đun được chạy với-m
.
nén
Bạn cũng có thể gói này vào một tập tin duy nhất và chạy nó từ dòng lệnh như thế này - nhưng lưu ý rằng các gói nén không thể thực hiện gói con hoặc submodules như điểm mấu chốt:
$ python -m zipfile -c demozip demo/*
$ python demozip
demo/__main__.py executed
demo/__init__.py executed
main() executed
- 1. Sử dụng các đối tượng riêng của mô-đun trong __main__.py
- 2. Tương đương clojure của thành ngữ Python "if __name__ == '__main__'" là gì?
- 3. Làm cách nào để nhập mô-đun là __main__?
- 4. Phạm vi nếu __name__ == __main__
- 5. Py Pandas .format (dataframe)
- 6. __main__ và Phạm vi trong python
- 7. sử dụng __init__.py
- 8. PHP tương đương với Python __name__ == "__main__"?
- 9. cách sử dụng __init__.py
- 10. Phím tắt cho nếu __name__ == '__main__':
- 11. Thêm mã vào __init__.py
- 12. Python: nhập khẩu một file py
- 13. Nhập mô-đun: __main__ vs nhập khẩu làm mô-đun
- 14. Tại sao lại thực hiện điều này? nếu - __name__ == '__main__'
- 15. Chạy tệp .py trong trình duyệt
- 16. Powershell equivilent của của python nếu __name__ == '__main__':
- 17. Sự khác biệt giữa "toàn cầu" và "nhập __main__"
- 18. Tệp __init__.py trống có đúng không?
- 19. Cách lấy tên tệp của mô-đun __main__ bằng Python?
- 20. `__import __ ('pkg_resources') là gì. Declare_namespace (__ name __)` làm gì?
- 21. Python - Làm cách nào để bạn chạy tệp .py?
- 22. Làm thế nào để tích hợp pep8.py trong Eclipse?
- 23. tệp py đơn để chuyển đổi rst thành html
- 24. file Nhập khẩu bằng Python từ __init__.py
- 25. API của gói trong python. Trong __init__.py?
- 26. Nhập mô-đun python không có phần mở rộng .py
- 27. Tại sao hàm main() không được định nghĩa bên trong if '__main__'?
- 28. Mục đích của `__metaclass__ = type` là gì?
- 29. Tên giao diện mạng iOS chính xác là gì? pdp_ip là gì? ap là gì?
- 30. Ý nghĩa của * args và ** kwargs là gì?
'__init __. Py' phục vụ một mục đích khác với' __main __. Py' không - không thực sự hiểu tại sao điều này được đánh dấu là trùng lặp. RAS, bạn có thể giải thích? –