pytest không thể nhập mô-đun trong khi python có thể


113

Tôi đang làm việc trên một gói bằng Python. Tôi sử dụng virtualenv. Tôi đặt đường dẫn đến thư mục gốc của mô-đun theo đường dẫn .pth trong virtualenv của mình, để tôi có thể nhập các mô-đun của gói trong khi phát triển mã và thực hiện kiểm tra (Câu hỏi 1: đó có phải là một cách tốt để làm không?). Điều này hoạt động tốt (đây là một ví dụ, đây là hành vi tôi muốn):

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rc import ns
>>> exit()
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello
command output: hello

Tuy nhiên, nếu tôi cố gắng sử dụng PyTest, tôi nhận được một số thông báo lỗi nhập:

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ pytest
=========================================== test session starts ============================================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items / 1 errors 

================================================== ERRORS ==================================================
________________________________ ERROR collecting tests/test_ns.py ________________________________
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ns.py:2: in <module>
    from rc import ns
E   ImportError: cannot import name ns
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================= 1 error in 0.09 seconds ==========================================
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ which pytest
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest

Tôi hơi khó hiểu, có vẻ như điều này chỉ ra lỗi nhập, nhưng Python làm tốt vậy tại sao lại có vấn đề cụ thể với PyTest? Bất kỳ gợi ý cho lý do / biện pháp khắc phục (Câu hỏi 2)? Tôi đã googled và làm tràn ngăn xếp lỗi 'ImportError: không thể nhập' cho PyTest, nhưng các lần truy cập tôi nhận được liên quan đến việc thiếu đường dẫn python và cách khắc phục lỗi này, điều này có vẻ không phải là vấn đề ở đây. Bất kỳ đề xuất?

Câu trả lời:


117

Đã tìm thấy câu trả lời:

KHÔNG đặt __init__.pytệp trong thư mục chứa KIỂM TRA nếu bạn định sử dụng pytest. Tôi đã có một tệp như vậy, xóa nó đã giải quyết được vấn đề.

Điều này thực sự bị chôn vùi trong các nhận xét cho câu trả lời thứ hai của vấn đề PATH với pytest 'ImportError: Không có mô-đun nào có tên YadaYadaYada' vì vậy tôi không nhìn thấy nó, hy vọng nó sẽ hiển thị nhiều hơn ở đây.


44
Buồn cười. Tôi đã gặp vấn đề tương tự và tôi đã phải thêm init .py vào thư mục thử nghiệm của mình.
Ev.

5
Vâng, đây không phải là một giải pháp chung (mặc dù nó là trong trường hợp của bạn), để hiểu lý do tại sao nên đọc: docs.pytest.org/en/latest/goodpractices.html#test-package-name
juan

1
Thông tin này là SAI và gây hiểu lầm! Sau khi thêm init .py vào thư mục thử nghiệm, mọi thứ đều hoạt động tốt
Leonardo Ostan

1
@LeonardoOstan nó có thể sai đối với bạn, nhưng nói chung không có nghĩa là thông tin này sai. Trong trường hợp của tôi, nó đã giải quyết được vấn đề.
Thủ phạm

77

Tôi không thể nói rằng tôi hiểu tại sao điều này hoạt động, nhưng tôi đã gặp vấn đề tương tự và các bài kiểm tra hoạt động tốt nếu tôi chạy python -m pytest.

Tôi đang ở trong virtualenv, với pytest cũng có sẵn trên toàn cầu:

(proj)tom@neon ~/dev/proj$ type -a python
python is /home/tom/.virtualenvs/proj/bin/python
python is /usr/bin/python

(proj)tom@neon ~/dev/proj$ python -V
Python 3.5.2

(proj)tom@neon ~/dev/proj$ type -a pytest
pytest is /home/tom/.virtualenvs/proj/bin/pytest
pytest is /usr/bin/pytest

(proj)tom@neon ~/dev/proj$ pytest --version
This is pytest version 3.5.0, imported from /home/tom/.virtualenvs/proj/lib/python3.5/site-packages/pytest.py

1
Cũng đã làm công việc cho tôi, vấn đề là, nó được chạy bởi phiên bản python được xác định thay vì v.env của bạn.
Nebulosar

11
một lý do có thể là python -m pytest [...]"cũng sẽ thêm thư mục hiện tại vào sys.path."
trừ

Có như nhau trong Windows 10, và chạy python -m pytest giải quyết nó
Duccio

Điều này cũng hoạt động trong môi trường ảo của tôi mà tôi phải chạypython3 -m pytest
Rishi Raj

Dựa trên nhận xét của @minusf mà tôi đang sử dụng PYTHONPATH=.:./src pytestlàm mục tiêu.
jan groth

29

Tôi vừa giải quyết điều này bằng cách xóa __init__.py trong thư mục gốc dự án của tôi:

.
├── __init__.py <--- removed
├── models
   ├── __init__.py
   ├── address.py
   ├── appointment.py
   └── client.py
├── requirements.txt
├── setup.cfg
├── tests
   ├── __init__.py
   ├── models
      ├── __init__.py
      ├── appointment_test.py
      └── client_test.py
   └── other_test.py
└── script.py

4
Câu trả lời được chấp nhận __init__.py file in a folder containing TESTSkhông giải quyết được vấn đề của tôi. Cái này đã hoạt động. Tôi đoán đó là do hệ thống phân cấp tệp.
smido

Tôi đã xóa __init__.pytệp. Tôi vẫn phải đối mặt với vấn đề. Việc thêm tệp conftest.py vào thư mục gốc đã làm việc cho tôi.
Vijay Sali

Tôi mong đợi conftest.py ở trong / tests không phải là root
Aaron McMillin

Việc đưa tệp conftest.py vào thư mục gốc cũng đã sửa nó cho tôi. Không có tệp .py init trong thư mục kiểm tra
Cập nhật

2
Giải pháp này đã làm việc cho tôi nhưng có ai biết điều này sẽ gây ra lỗi nhập không?
Aldo Okware

19

Tôi đã gặp vấn đề tương tự nhưng vì một lý do khác ngoài những lý do đã đề cập:

Tôi đã cài đặt py.test trên toàn cầu, trong khi các gói được cài đặt trong môi trường ảo.

Giải pháp là cài đặt pytesttrong môi trường ảo. (Trong trường hợp trình bao của bạn băm các tệp thực thi, như Bash, hãy sử dụng hash -rhoặc sử dụng đường dẫn đầy đủ đến py.test)


2
Chỉ cần nhận ra tôi có cùng một vấn đề lén lút, sử dụng anaconda. Tôi quên thêm pytestvirtualenv được tạo bởi conda, nhưng pytestnó vẫn có sẵn trong môi trường gốc của anaconda. Do đó, thể tìm thấy pytest , nhưng không phải bất kỳ gói nào được cài đặt trong môi trường.
Overdrivr

1
Tôi gặp vấn đề tương tự. pytest đã được cài đặt trên toàn cầu chứ không phải trong virtualenv. pip3 install pytestbên trong virtualenv đã khắc phục sự cố.
Ankit Singh

7

Sự cố này sẽ xảy ra nếu bạn có tests.pytệp và thư mục kiểm tra với tests/__init__.py.

Trong quá trình thu thập, pytest tìm thấy thư mục, nhưng khi nó cố gắng nhập các tệp thử nghiệm từ thư mục, tests.pytệp sẽ gây ra sự cố nhập.

Để khắc phục, chỉ cần xóa tests.pytệp và đặt tất cả các thử nghiệm của bạn bên trong tests/thư mục.

Đối với trường hợp cụ thể của bạn, cách khắc phục sẽ chính xác là:

  • Xóa tệp /home/zz/Desktop/GitFolders/rc/tests.py
  • Đảm bảo /home/zz/Desktop/GitFolders/rc/tests/__init__.pycó mặt

4

Tôi đã gặp sự cố tương tự, cùng một lỗi, nhưng nguyên nhân khác nhau. Tôi đã chạy mã kiểm tra tốt, nhưng với một phiên bản cũ của mô-đun. Trong phiên bản trước của mã của tôi, một lớp tồn tại, trong khi lớp kia thì không. Sau khi cập nhật mã của tôi, tôi nên chạy phần sau để cài đặt nó.

sudo pip install ./ --upgrade

Khi cài đặt mô-đun được cập nhật chạy pytest đã tạo ra kết quả chính xác (vì tôi đang sử dụng cơ sở mã chính xác).


1
Điều này đã làm việc cho tôi! Mô-đun của tôi đã được cài đặt cùng lúc như một thư viện trong bộ chứa docker mà tôi đang sử dụng để chạy pytest. Khi chạy trình thông dịch python, nó sẽ tìm thấy mã đã cập nhật, nhưng pytest sẽ tiếp tục tìm mã như khi thư viện được cài đặt lần đầu. Đang chạy đã pip install ./ --upgradecập nhật phiên bản đã cài đặt của lib với mã mới nhất và bật pytest để tìm phiên bản mới nhất này.
FaustoW

4

Trong trường hợp của tôi, lỗi nhập xảy ra do gói đang trỏ đến một gói / thư mục khác có cùng tên và đường dẫn của nó cao hơn một cấp so với thư mục mà tôi thực sự muốn. Tôi nghĩ điều này cũng giải thích tại sao một số người cần xóa _ init _.py trong khi những người khác cần thêm lại.

Tôi chỉ đặt print(the_root_package.__path__)(sau import the_root_package) trong cả pythonbảng điều khiển và pytesttập lệnh để so sánh sự khác biệt

Tóm lại: Khi bạn nhập python, gói bạn nhập có thể khác với gói khi bạn chạy pytest.


3

Cài đặt các gói vào môi trường ảo của bạn.
Sau đó, bắt đầu một trình bao mới và nguồn lại môi trường ảo của bạn.


1
Đó là vấn đề của tôi: một cài đặt mới mà không cần tải lại venv
đóng băng

2

Câu trả lời ở trên không phù hợp với tôi. Tôi vừa giải quyết nó bằng cách thêm đường dẫn tuyệt đối của mô-đun mà không được tìm thấy sys.pathở đầu test_xxx.py(mô-đun thử nghiệm của bạn), như:

import sys
sys.path.append('path')

1
Thay vì đặt những dòng này ở đầu test_main.py, tôi đặt nó vào conftest.pythư mục thử nghiệm của mình và nó hoạt động. Cảm ơn bạn đã cung cấp giải pháp có lập trình, thay vì hàng loạt tệp.
Cameron Hudson

2

Nếu nó liên quan đến mã python ban đầu được phát triển trong python 2.7 và bây giờ được chuyển sang python 3.x thì vấn đề có thể liên quan đến vấn đề nhập.

ví dụ: khi nhập một đối tượng từ một tệp: basenằm trong cùng một thư mục, điều này sẽ hoạt động trong python 2.x:

from base import MyClass

trong python 3.x bạn nên thay thế bằng baseđường dẫn đầy đủ hoặc .base không làm như vậy sẽ gây ra sự cố trên. vì vậy hãy thử:

from .base import MyClass

2

Tôi đã gặp sự cố này hôm nay và đã giải quyết nó bằng cách gọi python -m pytesttừ thư mục gốc của thư mục dự án của tôi.

Cuộc gọi pytesttừ cùng một vị trí vẫn gây ra sự cố.

Dự án dir của tôi được tổ chức như sau:

api/
 - server/
  - tests/
      - test_routes.py
  - routes/
      - routes.py
 - app.py

Mô-đun routesđã được nhập vào của tôi test_routes.pydưới dạng:from server.routes.routes import Routes

Hy vọng rằng sẽ giúp!


Cảm ơn vì đã nhắc nhở, tôi đã phải sử dụng thủ thuật này trong quá khứ và nó có trong tài liệu pytest.
Jason R Stevens CFA

1

Một trường hợp đặc biệt khác:

Tôi đã gặp vấn đề khi sử dụng tox. Vì vậy, chương trình của tôi chạy tốt, nhưng unittest qua tox vẫn tiếp tục phàn nàn. Sau khi cài đặt các gói (cần thiết cho chương trình), bạn cần chỉ định thêm các gói được sử dụng trong các đơn vị trong tox.ini

[testenv]
deps =
    package1
    package2 
...

1

Tôi đã nhận được điều này bằng cách sử dụng VSCode. Tôi có một môi trường chung cư. Tôi không nghĩ rằng tiện ích mở rộng VScode python có thể thấy các bản cập nhật mà tôi đang thực hiện.

python c:\Users\brig\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\testing_tools\run_adapter.py discover pytest -- -s --cache-clear test
Test Discovery failed:

Tôi đã phải chạy pip install ./ --upgrade


Lệnh pip đó trả về lỗi:Directory './' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.
Derek

1

Chỉnh sửa conftest.py của bạn và thêm các dòng mã sau:

import os, sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(file), '..')))

Và nếu cố gắng chạy trường hợp thử nghiệm thông qua thiết bị đầu cuối, hãy sử dụng ví dụ sau:

python -m pytest test_some_step_file_steps.py --html=HTML_step_file_output.html --self-contained-html

NameError: name 'file' is not defined- những gì nên tập tin bằng?
Koshmaar

1

Một chiến thắng lớn khác cho hệ thống nhập của Python. Tôi nghĩ lý do không có sự đồng thuận là những gì hoạt động có thể phụ thuộc vào môi trường của bạn và các công cụ bạn đang sử dụng trên đó.

Tôi đang sử dụng điều này từ VS Code, trong trình khám phá thử nghiệm trong Windows trong môi trường chung cư, Python 3.8.

Thiết lập tôi phải làm việc là:

mypkg/
    __init__.py
    app.py
    view.py
tests/
    test_app.py
    test_view.py

Theo thiết lập này intellisense hoạt động và khám phá thử nghiệm cũng vậy.

Lưu ý rằng ban đầu tôi đã thử những cách sau, như được khuyến nghị ở đây .

src/
    mypkg/
        __init__.py
        app.py
        view.py
tests/
    test_app.py
    test_view.py

Tôi không thể tìm thấy cách nào để làm cho điều này hoạt động từ VS Code bởi vì srcthư mục vừa thổi bay tâm trí của hệ thống nhập. Tôi có thể tưởng tượng có một cách để làm cho điều này hoạt động từ dòng lệnh. Là một chuyển đổi tương đối mới sang lập trình Python, nó mang lại cho tôi cảm giác hoài cổ khi làm việc với COM, nhưng hơi kém thú vị.


1

2 xu của tôi về điều này: pytest sẽ có cơ hội thất bại nếu bạn không sử dụng môi trường ảo. Đôi khi nó sẽ chỉ hoạt động, đôi khi không.

Do đó, giải pháp là:

  • gỡ bỏ pytest với gỡ cài đặt pip
  • tạo địa điểm của bạn
  • kích hoạt venv của bạn
  • pip cài đặt đường dẫn dự án của bạn ở chế độ có thể chỉnh sửa, vì vậy nó sẽ được pytest coi là một mô-đun (nếu không, pytest sẽ không tìm thấy các nhập nội bộ của bạn). Bạn sẽ cần một tệp setup.py cho việc đó
  • cài đặt các gói của bạn, bao gồm cả pytest
  • cuối cùng, chạy thử nghiệm của bạn

Mã, sử dụng Windows PowerShell:

pip uninstall pytest
python.exe -m venv my_env
.\my_env\Scripts\activate
(my_env) pip install -e .
(my_env) pip install pytest pytest-html pandas numpy

Rồi cuối cùng

(my_env) pytest --html="my_testing_report.html"

Ví dụ về setup.py, cho pip install -e:

import setuptools

setuptools.setup(
    name='my_package',
    version='devel',
    author='erickfis',
    author_email='erickfis@gmail.com',
    description='My package',
    long_description='My gooood package',
    packages=setuptools.find_packages(),
    classifiers=[
        'Programming Language :: Python :: 3',
        'Operating System :: OS Independent',
    ],
    include_package_data=True
)

1

Tôi không đồng ý với các bài viết nói rằng bạn phải xóa bất kỳ __init__.pytệp nào . Thay vào đó, những gì bạn phải làm là thay đổi sys.path.

Chạy thử nghiệm nơi bạn in sys.pathkhi chạy mã bình thường. Sau đó in sys.pathtrong khi chạy mã thông qua pytest. Tôi nghĩ bạn sẽ thấy rằng có sự khác biệt giữa hai con đường này, do đó, tại sao pytest bị phá vỡ.

Để khắc phục điều này, hãy chèn đường dẫn từ thử nghiệm đầu tiên ở chỉ mục thứ 0 của thử nghiệm thứ hai.

Hãy '/usr/exampleUser/Documents/foo'là phần tử đầu tiên của print(sys.path)thử nghiệm 1.

Dưới đây là mã sẽ khắc phục sự cố của bạn:

import sys sys.path[0] = '/usr/exampleUser/Documents/foo'

Đặt cái này ở đầu tệp của bạn, trước bảng sao kê nhập thực tế của bạn.

Nguồn: Tôi đã tự xử lý vấn đề này và quy trình trên đã giải quyết nó.


1

Giữ mọi thứ như cũ và chỉ cần thêm một tệp thử nghiệm trống tại thư mục gốc .. Đã giải quyết nó

Đây là những phát hiện, vấn đề này thực sự làm tôi nghe trộm trong một thời gian. Cấu trúc thư mục của tôi là

mathapp/
    - server.py  
    - configuration.py 
    - __init__.py 
    - static/ 
       - home.html  
tests/            
    - functional 
       - test_errors.py 
    - unit  
       - test_add.py

và pytest sẽ khiếu nại với ModuleNotFoundError và đưa ra GỢI Ý - hãy đảm bảo rằng các mô-đun / gói thử nghiệm của bạn có tên Python hợp lệ.

Tôi đã giới thiệu một tệp thử nghiệm ở cùng cấp độ với mathsapp và thư mục tests. Tệp không chứa gì. Bây giờ pytest không phàn nàn.

Kết quả không có tệp

$ pytest
============================= test session starts =============================
platform win32 -- Python 3.8.2, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: C:\mak2006\workspace\0github\python-rest-app-cont
collected 1 item / 1 error

=================================== ERRORS ====================================
_______________ ERROR collecting tests/functional/test_func.py ________________
ImportError while importing test module 'C:\mainak\workspace\0github\python-rest-app-cont\tests\functional\test_func.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests\functional\test_func.py:4: in <module>
    from mathapp.service import sum
E   ModuleNotFoundError: No module named 'mathapp'
=========================== short test summary info ===========================
ERROR tests/functional/test_func.py
!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
============================== 1 error in 0.24s ===============================

Kết quả với tệp

$ pytest
============================= test session starts =============================
platform win32 -- Python 3.8.2, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: C:\mak2006\workspace\0github\python-rest-app-cont
collected 2 items

tests\functional\test_func.py .                                          [ 50%]
tests\unit\test_unit.py .                                                [100%]

============================== 2 passed in 0.11s ==============================

Điều này đã làm nên mẹo của tôi
Subrata Fouzdar

điều này đã làm việc cho tôi sau một thời gian dài với vấn đề này. Có vẻ như pytest đang xử lý gốc của dự án như bất cứ nơi nào nó tìm thấy tệp thử nghiệm đầu tiên? chắc chắn đây là một lỗi?
oooyaya

1

Tôi đã giải quyết vấn đề của mình bằng cách đặt các PYTHONPATHBiến trong Môi trường cho cấu hình cụ thể mà tôi đang chạy thử nghiệm của mình.

Trong khi bạn đang xem tệp thử nghiệm trên PyCharm:

  1. Ctrl+ Shift+A
  2. Kiểu Edit Configurations
  3. Đặt các biến PYTHONPATHtrong Môi trường> Môi trường.

1

Chỉ cần đặt một conftest.pytệp trống trong thư mục gốc của dự án, bởi vì khi pytestphát hiện ra conftest.py, nó sẽ sửa đổi sys.path để có thể nhập nội dung từ conftestmô-đun. Cấu trúc thư mục chung có thể là:

Root
├── conftest.py
├── module1
   ├── __init__.py
   └── sample.py
└── tests
    └── test_sample.py

1

Gặp sự cố tương tự và nó hoạt động khi tôi thêm __init__.pytệp trong thư mục kiểm tra.


0

Có thể là do Pytest không đọc gói dưới dạng mô-đun Python trong khi Python thì (có thể là do các vấn đề về đường dẫn). Hãy thử thay đổi thư mục của tập lệnh pytest hoặc thêm mô-đun một cách rõ ràng vào PYTHONPATH của bạn.

Hoặc có thể là bạn đã cài đặt hai phiên bản Python trên máy của mình. Kiểm tra nguồn Python của bạn để tìm pytest và trình bao python mà bạn chạy. Nếu chúng khác nhau (tức là Python 2 so với 3), hãy sử dụng source activateđể đảm bảo rằng bạn đang chạy pytest được cài đặt cho cùng một python mà mô-đun được cài đặt.


0

Đối với bất kỳ ai đã thử mọi thứ mà vẫn gặp lỗi, tôi có một công việc xung quanh.

Trong thư mục đã cài đặt pytest , hãy chuyển đến thư mục pytest-env .

Mở tệp pyvenv.cfg .

Trong tệp thay đổi bao gồm-system-site-package từ false thành true .

home = /usr/bin
include-system-site-packages = true
version = 3.6.6

Hy vọng nó hoạt động. Đừng quên bình chọn.


0

Nếu bạn đã có tệp .pyc, hãy thử xóa chúng.

Hôm nay, tôi gặp sự cố này, đây là điều đã xảy ra:

đầu tiên tôi chạy pytest trong mac (điều này sẽ tạo ra các tệp pyc) sau đó tôi khởi chạy một vùng chứa docker (hệ điều hành là núi cao), với dự án được gắn kết và sau đó khi tôi cố gắng chạy pytest trong vùng chứa, ImportError xảy ra. sau khi làm sạch tất cả các tệp pyc, không có bất kỳ lỗi nào nữa.

Hy vọng điều này có thể hữu ích.


0

Nếu bạn cần tệp .py init trong thư mục của mình, hãy tạo một bản sao của thư mục và xóa init .py trong tệp đó để chạy các thử nghiệm của bạn. Nó hoạt động cho các dự án cục bộ. Nếu bạn cần chạy thử nghiệm thường xuyên, hãy xem liệu bạn có thể chuyển .py init của mình sang một tệp riêng biệt hay không.


0

[Đã giải quyết] Trước khi trực tiếp đi vào giải pháp xóa / thêm __init__.py, chúng tôi cũng có thể muốn xem cách nhập được thực hiện trong các lớp của bạn. Trên thực tế, tôi đã mất một ngày để chơi xung quanh chỉ __init__.pynghĩ rằng đó có thể là vấn đề :) Tuy nhiên, đó là khá nhiều thông tin.

Trong trường hợp của tôi, đó là cách gọi sai các lớp từ lớp python này sang lớp python khác đang ném ImportError. Đã sửa cách các lớp / mô-đun được gọi và nó hoạt động như một sự quyến rũ. Hy vọng, điều này cũng giúp ích cho những người khác.

Và có, đối với lỗi tương tự, chúng tôi có thể có các giải pháp khác nhau tùy thuộc vào cách mã được viết. Tốt hơn nên dành nhiều thời gian hơn để tự gỡ lỗi. Bài học rút ra :) Chúc bạn viết mã vui vẻ !!!


1
Bạn có thể cho một số ví dụ về cách sai và cách đúng?
Lurifaxel

0

Trong trường hợp của tôi, tôi đang làm việc trong một container và thật không may, pytest có xu hướng sử dụng python2.7 thay vì trình thông dịch python3 của tôi.

Trong trường hợp của tôi, điều này đã hoạt động:

python3 -m pytest

Cấu trúc thư mục của tôi

/
app/
-module1.py
-module2.py
-tests/
--test_module1.py
--test_module2.py
requirements.txt
README.md

-1

Tôi đã đặt tất cả các bài kiểm tra của mình trong một thư mục kiểm tra và gặp lỗi tương tự. Tôi đã giải quyết vấn đề này bằng cách thêm init .py vào thư mục đó như sau:

.
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- api
|-- app.py
|-- config.py
|-- migrations
|-- pull_request_template.md
|-- settings.py
`-- tests
    |-- __init__.py <------
    |-- conftest.py
    `-- test_sample.py
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.