answer
1174
Đây là một phần của gói. Đây là tài liệu.Đây là tài liệu.
Python định nghĩa hai loại gói, gói thông thường và gói không gian tên. Các gói thông thường là các gói truyền thống khi chúng tồn tại trong Python 3.2 trở về trước. Một gói thông thường thường được thực hiện như một thư mục chứa một
3tệp. Khi một gói thông thường được nhập,from spam import module
3tệp này được thực thi ngầm và các đối tượng mà nó xác định được liên kết với các tên trong không gian tên của gói. Cácfrom spam import module
3tập tin có thể chứa mã Python tương tự mà bất kỳ thành phần khác có thể chứa, và Python sẽ bổ sung thêm một số thuộc tính bổ sung cho các mô-đun khi nó được nhập khẩu.Các gói thông thường là các gói truyền thống khi chúng tồn tại trong Python 3.2 trở về trước. Một gói thông thường thường được thực hiện như một thư mục chứa mộtfrom spam import module
3tệp. Khi một gói thông thường được nhập,from spam import module
3tệp này được thực thi ngầm và các đối tượng mà nó xác định được liên kết với các tên trong không gian tên của gói. Cácfrom spam import module
3tập tin có thể chứa mã Python tương tự mà bất kỳ thành phần khác có thể chứa, và Python sẽ bổ sung thêm một số thuộc tính bổ sung cho các mô-đun khi nó được nhập khẩu.from spam import module
Nhưng chỉ cần nhấp vào liên kết, nó chứa một ví dụ, thêm thông tin và giải thích về các gói không gian tên, loại gói không có
3.from spam import module
from spam import module
3.1174 hữu ích 5 bình luận chia sẻ 5 bình luận chia sẻ
answer
685
Các tệp có tên
3được sử dụng để đánh dấu các thư mục trên đĩa dưới dạng các thư mục gói Python. Nếu bạn có các tập tinfrom spam import module
from spam import module
3được sử dụng để đánh dấu các thư mục trên đĩa dưới dạng các thư mục gói Python. Nếu bạn có các tập tinmydir/spam/__init__.py
mydir/spam/module.py
và
8trên đường dẫn của bạn, bạn có thể nhập mã from spam import module
9dưới dạngfrom spam import module
from spam import module
8trên đường dẫn của bạn, bạn có thể nhập mã from spam import module
9dưới dạngimport spam.module
hoặc là
from spam import module
Nếu bạn xóa
3tệp, Python sẽ không còn tìm các mô đun con trong thư mục đó nữa, vì vậy các nỗ lực nhập mô-đun sẽ thất bại.from spam import module
from spam import module
3tệp, Python sẽ không còn tìm các mô đun con trong thư mục đó nữa, vì vậy các nỗ lực nhập mô-đun sẽ thất bại.Các
3tập tin thường là trống rỗng, nhưng có thể được sử dụng để xuất khẩu phần chọn của gói dưới tên thuận tiện hơn, giữ chức năng tiện nghi, vv Cho ví dụ trên, nội dung của các mô-đun init có thể được truy cập nhưfrom spam import module
from spam import module
3tập tin thường là trống rỗng, nhưng có thể được sử dụng
để xuất khẩu phần chọn của gói dưới tên thuận tiện hơn, giữ chức năng tiện nghi, vv Cho ví dụ trên, nội dung của các mô-đun init có thể được truy cập nhưimport spam
dựa trên điều nàyđiều này
685 hữu ích 2 bình luận chia sẻ 2 bình luận chia sẻ
answer
407
Ngoài việc gắn nhãn thư mục là gói Python và xác định
2, import spam
3cho phép bạn xác định bất kỳ biến nào ở cấp gói. Làm như vậy thường thuận tiện nếu một gói xác định thứ gì đó sẽ được nhập thường xuyên, theo kiểu giống như API. Mô hình này thúc đẩy sự tuân thủ triết lý "phẳng hơn là lồng nhau" của Pythonic.from spam import module
import spam
2, from spam import module
3cho phép bạn xác định bất kỳ biến nào ở cấp gói. Làm như vậy thường thuận tiện nếu một gói xác định thứ gì đó sẽ được
nhập thường xuyên, theo kiểu giống như API. Mô hình này thúc đẩy sự tuân thủ triết lý "phẳng hơn là lồng nhau" của Pythonic.Một ví dụ
Dưới đây là một ví dụ từ một trong những dự án của tôi, trong đó tôi thường nhập một lệnh
4gọi import spam
5để tương tác với cơ sở dữ liệu của mình. Tôi đã viết một gói "cơ sở dữ liệu" với một vài mô-đun:import spam
import spam
4gọi import spam
5để tương tác với cơ sở dữ liệu của mình. Tôi đã viết một gói "cơ sở dữ liệu" với một vài
mô-đun:
database/
__init__.py
schema.py
insertions.py
queries.py
Của tôi
3chứa mã sau đây:from spam import module
from spam import module
3chứa mã sau đây:import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
Vì tôi xác định
5ở đây, tôi có thể bắt đầu một phiên mới bằng cú pháp bên dưới. Mã này sẽ được thực hiện giống nhau từ bên trong hoặc bên ngoài thư mục gói "cơ sở dữ liệu".import spam
import spam
5ở đây, tôi có thể bắt đầu một phiên mới bằng cú pháp bên dưới. Mã này sẽ được thực hiện giống nhau từ bên trong hoặc bên ngoài thư mục gói "cơ sở dữ liệu".from database import Session
session = Session[]
Tất nhiên, đây là một sự thuận tiện nhỏ - giải pháp thay thế sẽ là xác định
5trong một tệp mới như "create_session.py" trong gói cơ sở dữ liệu của tôi và bắt đầu các phiên mới bằng cách sử dụng:import spam
import spam
5trong
một tệp mới như "create_session.py" trong gói cơ sở dữ liệu của tôi và bắt đầu các phiên mới bằng cách sử dụng:from database.create_session import Session
session = Session[]
đọc thêm
Có một chủ đề reddit khá thú vị bao gồm các cách sử dụng thích hợp
3ở đây:from spam import module
from spam import module
3ở đây://www.reddit.com/r/Python/comments/1bbbwk/whats_your_opinion_on_what_to_include_in_init_py/
Đa số ý kiến dường như là
3các tệp nên rất mỏng để tránh vi phạm triết lý "rõ ràng là tốt hơn ngầm".from spam import module
from spam import module
3các tệp nên rất mỏng để tránh vi phạm triết lý "rõ ràng là tốt hơn ngầm".407 hữu ích 2 bình luận chia sẻ 2 bình luận chia sẻ
answer
138
Có 2 lý do chính cho
3from spam import module
from spam import module
3
Để thuận tiện: những người dùng khác sẽ không cần biết vị trí chính xác của các chức năng trong phân cấp gói của bạn.
your_package/ __init__.py file1.py/ file2.py/ ... fileN.py # in __init__.py from file1 import * from file2 import * ... from fileN import * # in file1.py def add[]: pass
sau đó những người khác có thể gọi add [] bằng
from your_package import add
mà không biết file1, như
0import spam.module
Nếu bạn muốn một cái gì đó được khởi tạo; ví dụ: ghi nhật ký [cần được đặt ở cấp cao nhất]:ví dụ: ghi nhật ký [cần được đặt ở cấp cao nhất]:
1import spam.module
138 hữu ích 1 bình luận chia sẻ 1 bình luận chia sẻ
answer
94
Các
3tập tin làm cho danh bạ trị Python chứa nó như là mô-đun.from spam import module
from spam import module
3tập tin làm cho danh bạ trị Python chứa nó như là mô-đun.Hơn nữa, đây là tệp đầu tiên được tải trong một mô-đun, vì vậy bạn có thể sử dụng nó để thực thi mã mà bạn muốn chạy mỗi khi mô-đun được tải hoặc chỉ định các mô hình con được xuất.
94 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ
answer
69
Vì Python 3.3,
3không còn cần thiết để xác định các thư mục là các gói Python có thể nhập được.from spam import module
from spam import module
3không còn cần thiết để xác định các thư mục là các gói Python có thể nhập được.Kiểm tra PEP 420: Gói không gian tên ngầm định :PEP 420: Gói không gian tên ngầm định :
Hỗ trợ riêng cho các thư mục gói không yêu cầu
3tệp đánh dấu và có thể tự động trải rộng trên nhiều phân đoạn đường dẫn [lấy cảm hứng từ các cách tiếp cận khác nhau của bên thứ ba đối với các gói không gian tên, như được mô tả trong PEP 420 ]from spam import module
3tệp đánh dấu và có thể tự động trải rộng trên nhiều phân đoạn đường dẫn [lấy cảm hứng từ các cách tiếp cận khác nhau của bên thứ ba đối với các gói không gian tên, như được mô tả trong PEP 420 ]from spam import module
Đây là bài kiểm tra:
import spam.module
2tài liệu tham khảo: //docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-namespace-packages //www.python.org/dev/peps/pep-0420/ Is __init__. py không cần thiết cho các gói trong Python 3?
//docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-namespace-packages
//www.python.org/dev/peps/pep-0420/
Is __init__. py không
cần thiết cho các gói trong Python 3?
69 hữu ích 1 bình luận chia sẻ 1 bình luận chia sẻ
answer
48
Trong Python định nghĩa của gói rất đơn giản. Giống như Java, cấu trúc phân cấp và cấu trúc thư mục là như nhau. Nhưng bạn phải có
3trong một gói. Tôi sẽ giải thích các from spam import module
3tập tin với ví dụ dưới đây:Giống như Java, cấu trúc phân cấp và cấu trúc thư mục là như
nhau. Nhưng bạn phải có from spam import module
from spam import module
3trong một gói. Tôi sẽ giải thích các from spam import module
3tập tin với ví dụ dưới đây:import spam.module
3from spam import module
3có thể trống rỗng, miễn là nó tồn tại. Nó chỉ ra rằng thư mục nên được coi là một gói. Tất nhiên, from spam import module
3cũng có thể thiết lập nội dung phù hợp.có thể trống rỗng, miễn là nó tồn tại. Nó chỉ ra rằng thư mục nên được coi là một gói. Tất nhiên, from spam import module
3cũng có thể thiết lập nội dung phù hợp.Nếu chúng ta thêm một hàm trong module_n1:
import spam.module
4Sau khi chạy:
import spam.module
5Sau đó, chúng tôi đã theo gói phân cấp và gọi module_n1 là hàm. Chúng tôi có thể sử dụng
3trong subPackage_b như thế này:Chúng tôi có thể sử dụng from spam import module
from spam import module
3trong subPackage_b như thế này:import spam.module
6Sau khi chạy:
import spam.module
7Do đó sử dụng * nhập, gói mô-đun là tùy thuộc vào
3nội dung.from spam import module
from spam import module
3nội dung.48 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ
answer
37
from spam import module
3 sẽ coi thư mục của nó là một mô-đun có thể tải. sẽ coi thư mục của nó là một mô-đun có thể tải.Đối với những người thích đọc mã, tôi đặt bình luận của Nhà giả kim Two-Bit ở đây.bình luận của Nhà giả kim Two-Bit ở đây.
import spam.module
837 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ
answer
30
3 sẽ coi thư mục của nó là một mô-đun có thể tải.from spam import module
from spam import module
3tệp, bạn vẫn nên bao gồm
một tệp.Đối với những người thích đọc mã, tôi đặt bình luận của Nhà giả kim Two-Bit ở đây.
37 hữu ích 0 bình luận chia sẻ
3tệp:from spam import module
Mặc dù Python hoạt động mà không có
3tệp, bạn vẫn nên bao gồm một tệp.from spam import module
import spam.module
9Nó chỉ định một gói nên được coi là một mô-đun, do đó bao gồm nó [ngay cả khi nó trống].
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
4có chứa điều này:from spam import module
0Cũng có trường hợp bạn thực sự có thể sử dụng một
3tệp:from spam import module
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
5bạn cần một trong những điều sau đây:from spam import module
1Hãy tưởng tượng bạn có cấu trúc tệp sau:
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
4bên trong import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
7[thời gian chạy / phụ thuộc chẳng hạn] nhưng bạn chỉ muốn nhập import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
7.Và
4có chứa điều này:import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
4để from spam import module
3sau đó bạn có thể sử dụng
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
5bằng cách chỉ nhập khẩu import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
7:from spam import module
2Để sử dụng,
5bạn cần một trong những điều sau đây:import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
from spam import module
3được coi là một phần của gói.Có thể ở đó bạn cần [hoặc muốn] để giữ
4bên trong import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
7[thời gian chạy / phụ thuộc chẳng hạn] nhưng bạn chỉ muốn nhập import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
7.Một ví dụ là với JSON , nơi chạy import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine[os.environ['DATABASE_URL']]
Session = sessionmaker[bind=engine]
from database import Session
session = Session[]
4thực sự là nhập from spam import module
3từ
from database import Session
session = Session[]
6gói [ xem cấu trúc tệp gói ở đây ]:Nếu bạn đã thay đổi tên của
4đểimport os from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine[os.environ['DATABASE_URL']] Session = sessionmaker[bind=engine]
3sau đó bạn có thể sử dụngfrom spam import module
5bằng cách chỉ nhập khẩuimport os from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine[os.environ['DATABASE_URL']] Session = sessionmaker[bind=engine]
7:import os from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine[os.environ['DATABASE_URL']] Session = sessionmaker[bind=engine]
7from database import Session session = Session[]
Điều này hoạt động vì
3được coi là một phần của gói. 0 bình luận chia sẻ from spam import module