Đường dẫn sys của Python nối thêm nhập

Nhập tệp bằng Python [ít nhất là cho đến gần đây] là một quy trình không tầm thường, thường yêu cầu thay đổi. Một số khía cạnh của quy trình nhập có thể được kiểm soát thông qua cờ dòng lệnh

testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
1, cờ này có thể đảm nhận các giá trị này

  • root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    0 [mặc định]. đường dẫn thư mục chứa từng mô-đun sẽ được chèn vào phần đầu nếu chưa có ở đó, sau đó được nhập bằng nội trang

    Điều này yêu cầu tên mô-đun thử nghiệm phải là duy nhất khi cây thư mục thử nghiệm không được sắp xếp theo gói, vì các mô-đun sẽ đưa vào sau khi nhập

    Đây là cơ chế cổ điển, có từ thời Python 2 vẫn còn được hỗ trợ

  • root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    4. thư mục chứa từng mô-đun được thêm vào cuối nếu chưa có ở đó và được nhập bằng
    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    2

    Điều này tốt hơn cho phép chạy các mô-đun thử nghiệm đối với các phiên bản gói đã cài đặt ngay cả khi gói được thử nghiệm có cùng gốc nhập. Ví dụ

    testing/__init__.py
    testing/test_pkg_under_test.py
    pkg_under_test/
    

    các thử nghiệm sẽ chạy với phiên bản đã cài đặt của

    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    7 khi
    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    8 được sử dụng trong khi với
    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    0, họ sẽ chọn phiên bản cục bộ. Loại nhầm lẫn này là lý do tại sao chúng tôi ủng hộ việc sử dụng bố cục

    Giống như

    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    0, yêu cầu tên module test phải là duy nhất khi cây thư mục test không sắp xếp theo gói, vì module sẽ đưa vào sau khi import

  • pytest root/
    
    2. mới trong pytest-6. 0, chế độ này sử dụng để nhập mô-đun thử nghiệm. Điều này cho phép toàn quyền kiểm soát quá trình nhập và không yêu cầu thay đổi

    Vì lý do này, điều này không yêu cầu tên mô-đun thử nghiệm phải là duy nhất

    Tuy nhiên, một nhược điểm là các mô-đun thử nghiệm không thể nhập được lẫn nhau. Ngoài ra, các mô-đun tiện ích trong thư mục kiểm tra không thể nhập tự động vì thư mục kiểm tra không còn được thêm vào

    Ban đầu, chúng tôi dự định đặt

    pytest root/
    
    2 làm mặc định trong các bản phát hành trong tương lai, tuy nhiên, hiện tại rõ ràng là nó có một số nhược điểm riêng nên mặc định sẽ vẫn là
    root/
    |- foo/
       |- __init__.py
       |- conftest.py
       |- bar/
          |- __init__.py
          |- tests/
             |- __init__.py
             |- test_foo.py
    
    0 trong tương lai gần

Xem thêm

biến cấu hình

Kịch bản chế độ nhập
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
0 và
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
4

Dưới đây là danh sách các tình huống khi sử dụng chế độ nhập

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
0 hoặc
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
4 trong đó pytest cần thay đổi
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
2 để nhập các mô-đun thử nghiệm hoặc tệp
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
3 và các sự cố mà người dùng có thể gặp phải do điều đó

Kiểm tra mô-đun / tệp
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
3 bên trong gói

Xem xét cách bố trí tệp và thư mục này

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py

Khi thực hiện

________số 8

pytest sẽ tìm thấy

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
76 và nhận ra rằng đó là một phần của gói do có một tệp
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
77 trong cùng một thư mục. Sau đó, nó sẽ tìm kiếm ngược lên cho đến khi có thể tìm thấy thư mục cuối cùng vẫn chứa tệp
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
77 để tìm thư mục gốc [trong trường hợp này là
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
79]. Để tải mô-đun, nó sẽ chèn
pytest root/
0 vào trước
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
2 [nếu chưa có] để tải
pytest root/
2 dưới dạng mô-đun
pytest root/
3

Logic tương tự áp dụng cho tệp

testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
3. nó sẽ được nhập dưới dạng mô-đun
pytest root/
5

Giữ nguyên tên gói đầy đủ là rất quan trọng khi các thử nghiệm trực tiếp trong một gói để tránh sự cố và cho phép các mô-đun thử nghiệm có tên trùng lặp. Điều này cũng được thảo luận chi tiết trong

Các mô-đun thử nghiệm độc lập / tệp
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
3

Xem xét cách bố trí tệp và thư mục này

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
7

Khi thực hiện

________số 8

pytest sẽ tìm thấy

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
76 và nhận ra rằng nó KHÔNG phải là một phần của gói do không có tệp
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
77 nào trong cùng một thư mục. Sau đó, nó sẽ thêm
pytest root/
9 vào
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
2 để nhập
pytest root/
2 dưới dạng mô-đun
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
22. Điều tương tự cũng được thực hiện với tệp
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
3 bằng cách thêm
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
24 vào
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
2 để nhập dưới dạng
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
26

Vì lý do này, bố cục này không thể có các mô-đun thử nghiệm có cùng tên, vì tất cả chúng sẽ được nhập vào không gian tên nhập chung

Điều này cũng được thảo luận chi tiết trong

Gọi
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
27 so với
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
28

Chạy pytest với

testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
29 thay vì
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
70 mang lại hành vi gần như tương đương, ngoại trừ việc cái sau sẽ thêm thư mục hiện tại vào
testing/__init__.py
testing/test_pkg_under_test.py
pkg_under_test/
2, đây là hành vi tiêu chuẩn của
root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py
72

Đường dẫn sys append hoạt động như thế nào trong Python?

Đầu ra. APPENDING PATH- append[] là một chức năng tích hợp sẵn của mô-đun sys có thể được sử dụng với biến đường dẫn để thêm một đường dẫn cụ thể cho trình thông dịch tìm kiếm .

Làm cách nào để thêm đường dẫn đến PYTHONPATH?

Trong Windows, bạn có thể thêm PYTHONPATH cũng như các biến môi trường thông thường bằng cách nhấp chuột phải vào PC của bạn [Máy tính của tôi] -> Hệ thống -> Thuộc tính hệ thống -> Biến môi trường< . Trong Windows, phân tách nhiều đường dẫn bằng dấu chấm phẩy ;. Thư mục '/Users/mbp/Documents/lib' trong ví dụ trên được thêm vào PYTHONPATH. . In Windows, separate multiple paths with a semicolon ; . The directory '/Users/mbp/Documents/lib' in the above example is added to PYTHONPATH .

Làm cách nào để cài đặt gói sys trong Python?

Mô-đun sys đi kèm với Python, có nghĩa là bạn không cần tải xuống và cài đặt riêng nó bằng cách sử dụng trình quản lý gói PIP .

Làm cách nào để nhập một gói bằng Python?

Trong Python, chúng ta có thể nhập các mô-đun từ các gói bằng cách sử dụng dấu chấm [. ] toán tử . Bây giờ, nếu mô-đun này chứa một hàm có tên select_difficulty[] , chúng ta phải sử dụng tên đầy đủ để tham chiếu nó.

Chủ Đề