ปัญหา PATH กับ pytest 'ImportError: ไม่มีโมดูลชื่อ YadaYadaYada'


231

ฉันใช้ easy_install เพื่อติดตั้ง pytest บน mac และเริ่มเขียนการทดสอบสำหรับโครงการที่มีโครงสร้างไฟล์ที่ชอบ:

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py

ทำงานpy.testในไดเรกทอรี repo ทุกอย่างทำงานตามที่คุณคาดหวัง

แต่เมื่อฉันลองสิ่งเดียวกันบน linux หรือ windows (ทั้งคู่มี pytest 2.2.3 อยู่) มันจะเห่าเมื่อใดก็ตามที่มันกระทบการนำเข้าบางสิ่งจากพา ธ ของแอปพลิเคชันของฉัน พูดเช่นfrom app import some_def_in_app

ฉันจำเป็นต้องแก้ไข PATH ของฉันเพื่อเรียกใช้ py.test บนระบบเหล่านี้หรือไม่? มีใครมีประสบการณ์นี้


4
นี่คือวิธีแก้ไขด้วย setuptools
ederag

4
โปรดตรวจสอบ @hoefling คำตอบและพิจารณาการเปลี่ยนคำตอบที่คุณยอมรับถ้าหากอนุญาตหลังจากนี้มานาน: ดีกว่ามาก!
Davide

คำตอบ:


91

ใช่โฟลเดอร์แหล่งที่มาไม่ได้อยู่ในเส้นทางของ Python ถ้าคุณcdไปที่ไดเรกทอรีทดสอบ

คุณมี 2 ทางเลือก:

  1. เพิ่มพา ธ ไปยังไฟล์ทดสอบด้วยตนเองดังนี้:

    import sys, os
    myPath = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, myPath + '/../')
  2. เรียกใช้การทดสอบด้วยการ env PYTHONPATH=../var


11
เมื่อฉันcdไอเอ็นจีไปยังไดเรกทอรีหรือไม่ ฉันกำลังวิ่งpy.testจากรากของฉัน เว้นแต่ฉันเข้าใจผิดและคุณหมายถึงเป็น pytest เดินผ่านโฟลเดอร์ของฉัน
MattoTodd

ถ้ามันเป็นcdปัญหาฉันจะไม่ตีมันบน mac ด้วยเหรอ?
MattoTodd

โอ้ฉันอ่านผิดและคิดว่ามันไม่ได้ผลจากไดเรกทอรีการทดสอบ เคล็ดลับในข้อเสนอแนะ 1 ยังคงใช้ได้ ฉันใช้ Linux เท่านั้นฉันจึงไม่สามารถอธิบายลักษณะการทำงานของ OS อื่น ๆ ได้
Not_a_Golfer

คุณมีการนำเข้าเช่นนั้นในไฟล์ test.py ทั้งหมดหรือไม่
MattoTodd

4
ใช่ แต่โครงสร้างไดเรกทอรีของฉันมักจะแตกต่างกันเล็กน้อย - ฉันมักจะเก็บ / src และ / test ไว้ภายใต้ไดเรกทอรีราก
Not_a_Golfer

275

ฉันไม่แน่ใจว่าทำไม py.test ไม่เพิ่มไดเรกทอรีปัจจุบันใน PYTHONPATH เอง แต่นี่เป็นวิธีแก้ปัญหา (เพื่อดำเนินการจากรากของพื้นที่เก็บข้อมูลของคุณ):

python -m pytest tests/

มันทำงานได้เพราะ Python เพิ่มไดเรกทอรีปัจจุบันใน PYTHONPATH ให้คุณ


2
มันจำเป็นต้องเขียนการนำเข้าแบบสัมพัทธ์เป็นแบบสัมบูรณ์หากคุณมีรหัสสำหรับเรียกใช้แอปพลิเคชันที่ไม่ได้อยู่ในระดับที่คุณรันคำสั่งจาก ตัวอย่างเช่น: project/test/all-my-testsและproject/src/app.pyเนื่องจากการเปลี่ยนแปลงนั้นจำเป็นต้องโทรหาapp.pyทางอ้อมโดยใช้__main__.pyไฟล์ในproject/srcเพื่อให้สามารถใช้การโทรpython -m srcได้ สิ่งที่ยุ่งเหยิงสวยเท่าที่ฉันสามารถบอกได้
Zelphir Kaltstahl

3
@Zelphir: การใช้การนำเข้าแบบสัมบูรณ์เป็นแนวทางปฏิบัติที่แนะนำ Habnabit มีบทความที่ดีเกี่ยวกับแนวปฏิบัติที่ดีที่สุดเกี่ยวกับบรรจุภัณฑ์: blog.habnab.it/blog/2013/07/21/python-packages-and-youและ PEP8 กล่าวว่า "ไม่ควรใช้การนำเข้าที่เกี่ยวข้องโดยนัยและถูกลบออกใน Python 3." ดู: python.org/dev/peps/pep-0008
Apteryx

1
@Apteryx คุณหมายถึง "project-absolute" ใช่ไหม เพราะสิ่งต่าง ๆ เช่น/home/user/dev/projectxyz/src ...จะไม่ดีจริง ๆ และไม่เรียกใช้บนเครื่องอื่นในกรณีส่วนใหญ่ ฉันคิดว่าสิ่งที่ฉันหมายถึงคือฉันต้องเขียนรูทโปรเจ็กต์ทั้งหมดไปยังโมดูลพา ธ แม้ว่าโมดูลจะอยู่ในโฟลเดอร์เดียวกันกับไฟล์ที่รัน ฉันไม่รู้ว่านี่เป็นวิธีปฏิบัติที่ดีที่สุดดังนั้นจึงเป็นข้อมูลที่มีประโยชน์ขอบคุณ ฉันเห็นด้วยกับส่วนใหญ่ของ pep8 แม้ว่ามันจะยังไม่สมบูรณ์
Zelphir Kaltstahl

1
@Zelphir ใช่นั่นคือสิ่งที่ฉันหมายถึง ฉันเชื่อว่าคำว่าการนำเข้าแบบสัมบูรณ์ใน Python มักอ้างถึง "project-absolute" ดู: python.org/dev/peps/pep-0328/#rationale-for-absolute-imports ในความเป็นจริงฉันค่อนข้างแน่ใจว่าคุณไม่สามารถนำเข้าจากตำแหน่งสุ่มเส้นทางสัมบูรณ์อย่างน้อยก็ใช้กลไก "นำเข้า" เริ่มต้น
Apteryx

4
ฉันได้เพิ่ม__init__.pyในการทดสอบที่แก้ไขปัญหา ตอนนี้ฉันสามารถใช้pytest
Kiran Kumar Kotari

154

conftest สารละลาย

โซลูชันที่มีการบุกรุกน้อยที่สุดกำลังเพิ่มไฟล์ว่างที่ชื่อconftest.pyในrepo/ไดเรกทอรี:

$ touch repo/conftest.py

แค่นั้นแหละ. ไม่จำเป็นต้องเขียนรหัสที่กำหนดเองสำหรับการจัดการsys.pathหรืออย่าลืมลากPYTHONPATHหรือวาง__init__.pyลงใน dirs ที่มันไม่ได้อยู่

ไดเรกทอรีโครงการหลังจากนั้น:

repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
     └── test_app.py

คำอธิบาย

pytestค้นหาconftestโมดูลบนคอลเลกชันทดสอบเพื่อรวบรวม hooks และส่วนควบแบบกำหนดเองและเพื่อนำเข้าวัตถุที่กำหนดเองจากพวกเขาpytestเพิ่มไดเรกทอรีหลักของconftest.pyไปยังsys.path (ในกรณีนี้repoไดเรกทอรี)

โครงสร้างโครงการอื่น ๆ

ถ้าคุณมีโครงสร้างโครงการอื่น ๆ วางconftest.pyใน dir รากแพคเกจ (หนึ่งที่มีแพคเกจ แต่ไม่ได้เป็นแพคเกจของตัวเองจึงไม่ได้ประกอบด้วย__init__.py) ตัวอย่างเช่น:

repo
├── conftest.py
├── spam
   ├── __init__.py
   ├── bacon.py
   └── egg.py
├── eggs
   ├── __init__.py
   └── sausage.py
└── tests
     ├── test_bacon.py
     └── test_egg.py

src แบบ

แม้ว่าวิธีนี้สามารถใช้กับsrcเค้าโครง (วางconftest.pyในsrcdir):

repo
├── src
   ├── conftest.py
   ├── spam
      ├── __init__.py
      ├── bacon.py
      └── egg.py
   └── eggs 
       ├── __init__.py
       └── sausage.py
└── tests
     ├── test_bacon.py
     └── test_egg.py

ระวังว่าการเพิ่มsrcเพื่อPYTHONPATHลดความหมายและประโยชน์ของsrcเค้าโครง! คุณจะจบลงด้วยการทดสอบรหัสจากพื้นที่เก็บข้อมูลและไม่ใช่แพ็คเกจที่ติดตั้ง หากคุณต้องการทำสิ่งนั้นคุณอาจไม่ต้องการรหัสผ่านsrcเลย

จะไปจากที่นี่

แน่นอนconftestโมดูลไม่ใช่แค่ไฟล์บางไฟล์ที่จะช่วยให้ค้นพบซอร์สโค้ด นี่คือสิ่งที่การปรับปรุงpytestโครงงานเฉพาะและการปรับแต่งชุดทดสอบของคุณทั้งหมดเกิดขึ้น pytestมีจำนวนมากของข้อมูลเกี่ยวกับconftestโมดูลกระจายอยู่ทั่วทั้งเอกสารของพวกเขา ; เริ่มต้นด้วยconftest.py: ปลั๊กอินสำหรับแต่ละไดเรกทอรีในเครื่อง

นอกจากนี้ SO ยังมีคำถามที่ยอดเยี่ยมเกี่ยวกับconftestโมดูล: ใน py.test การใช้ไฟล์ conftest.py คืออะไร


2
@ aaa90210 ถึงแม้ว่าฉันไม่สามารถทำซ้ำปัญหาของคุณ (นำเข้าจาก conftest ใน root dir ทำงานได้ในทุกระดับ) คุณไม่ควรนำเข้าจากไฟล์ conftest เนื่องจากเป็นชื่อที่สงวนไว้pytestและขอแนะนำไม่ให้ทำเช่นนั้น ด้วยการทำเช่นนี้คุณสามารถเพาะเมล็ดเพื่อหาข้อผิดพลาดในอนาคต สร้างชื่อโมดูลอื่นutils.pyและวางรหัสเพื่อนำมาใช้ซ้ำในการทดสอบที่นั่น
hoefling

4
ยกนิ้ว! นี่เป็นทางออกเดียวที่ทำงานได้ดีสำหรับฉัน
130

4
ควรเป็นคำตอบที่ได้รับการยอมรับ - ขอบคุณ!
Martin Peck

2
เหตุผลconftest.pyไม่ได้เป็นของรหัสแอปพลิเคชันและ imo วางไว้ภายใต้src/ไม่ถูกต้อง
Nik O'Lai

2
คำตอบนี้ควรเป็นหัวข้อคงที่ดังนั้น ขอบคุณมาก.
Rigoberta Raviolini

119

ผมมีปัญหาเหมือนกัน. ฉันแก้ไขโดยเพิ่ม__init__.pyไฟล์ว่างในtestsไดเรกทอรีของฉัน


77
โปรดทราบว่านี่ไม่แนะนำโดย py.test: avoid “__init__.py” files in your test directories. This way your tests can run easily against an installed version of mypkg, independently from the installed package if it contains the tests or not.SRC: pytest.org/latest/goodpractises.html
K.

24
ฉันมาที่นี่พร้อมกับคำถามเดียวกันและพบว่าการลบออก__init__.pyจากไดเรกทอรีการทดสอบของฉันแก้ไขได้สำหรับฉัน
101

3
@ มาเฟียฉันไม่เห็นปัญหาหรือไม่การทดสอบไม่จำเป็นต้องเป็นรหัสที่สามารถนำเข้าได้พวกเขาพบได้จากนักวิ่งทดสอบของคุณ เฉพาะรหัสที่จะทดสอบควรเป็นแพ็คเกจ / โมดูลที่ติดตั้งไม่ใช่การทดสอบ
K. -Michael Aye

5
การเพิ่ม__init__.pyในไดเรกทอรีย่อยของtest/ทำให้การทำงานนำเข้าที่แน่นอนสำหรับการเรียกใช้การทดสอบเฉพาะในไดเรกทอรีย่อยนั้นกับโมดูลที่จะติดตั้ง ขอบคุณ
Bryce Guinta

7
ไปที่นั่นแล้ว: doc.pytest.org/en/latest/goodpractices.htmlหาง่ายด้วย google
K. -Michael Aye

46

เรียกใช้pytestตัวเองเป็นโมดูลด้วย: python -m pytest tests


3
ดูเหมือนว่านี่จะเป็นวิธีแก้ปัญหาการทำงาน แต่ทุกคนสามารถอธิบายได้ว่าทำไม ฉันต้องการแก้ไขสาเหตุพื้นฐานมากกว่าใช้เพียงอย่างเดียวpython -m pytestโดยไม่มีคำอธิบายใด ๆ นอกจาก "เพราะใช้งานได้"
Janne Enberg

4
สิ่งนี้จะเกิดขึ้นเมื่อลำดับชั้นของโครงการเป็นตัวอย่าง: package/src package/testsและในtestsการนำเข้าจากsrcคุณ การดำเนินการเป็นโมดูลจะพิจารณาการนำเข้าเป็นแบบสัมบูรณ์มากกว่าสัมพันธ์กับตำแหน่งการดำเนินการ
Stefano Messina

1
วิธีนี้ช่วยฉันขอบคุณ! สาเหตุของสิ่งนี้เป็นเพราะความขัดแย้งในเวอร์ชั่น Python การทดสอบ pytest ใช้งานได้กับเวอร์ชั่นไพ ธ อนรุ่นก่อนหน้า ในสถานการณ์ของฉันรุ่นหลามของฉันคือ 3.7.1 การทดสอบ pytest ของ python -m ทำงานได้ แต่ไม่ใช่การทดสอบ pytest
Ruxi Zhang

1
จากPytest "การเรียกใช้ pytest ด้วย python -m pytest [... ] แทน pytest [... ] ให้ผลการทำงานเกือบเทียบเท่ายกเว้นว่าการเรียกก่อนหน้านี้จะเพิ่มไดเรกทอรีปัจจุบันไปยัง sys.path"
Moad Ennagi

37

คุณสามารถรันด้วย PYTHONPATH ในรูทโปรเจ็กต์

PYTHONPATH=. py.test

หรือใช้การติดตั้ง pip เป็นการนำเข้าที่แก้ไขได้

pip install -e .   # install package using setup.py in editable mode

3
ที่ไม่ทำงานสำหรับฉันกับtestไดเรกทอรีไม่ได้อยู่ในsrcโครงสร้างไดเรกทอรีและโทรจากไดเรกทอรีที่มีทั้งtestและsrcไดเรกทอรี
Zelphir Kaltstahl

21

ฉันสร้างสิ่งนี้เป็นคำตอบสำหรับคำถามของคุณและความสับสนของฉันเอง ฉันหวังว่ามันจะช่วย เอาใจใส่ PYTHONPATH ทั้งในบรรทัดคำสั่ง py.test และใน tox.ini

https://github.com/jeffmacdonald/pytest_test

โดยเฉพาะ: คุณต้องบอก py.test และพิษที่จะหาโมดูลที่คุณรวมอยู่

ด้วย py.test คุณสามารถทำได้:

PYTHONPATH=. py.test

และด้วยสารพิษเพิ่มสิ่งนี้ใน tox.ini ของคุณ:

[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}

1
คุณช่วยอธิบายสั้น ๆ เกี่ยวกับโครงการที่คุณเชื่อมโยงได้หรือไม่?
JF Meier

1
อาจเป็นเพียงฉัน แต่ README ในโครงการนั้นมีรายละเอียดค่อนข้างดีและความคิดเห็นของฉันเกี่ยวกับ stackoverflow บอกว่าทำไมฉันถึงสร้าง repo ขึ้นมา
Jeff MacDonald

5
แม้ว่ามันไม่จำเป็นอย่างเคร่งครัด แต่เป็นนโยบายปกติที่จะมีเนื้อหาหลักของคำตอบในคำตอบนั้นเองเพราะมันทำให้มั่นใจว่าคำตอบนั้นเป็นที่เข้าใจได้ในอีก x ปีนับจากนี้เมื่อทรัพยากรที่เชื่อมโยงอาจหายไปนาน
JF Meier

:) นั่นคืออินเทอร์เน็ตสำหรับคุณ
Jeff MacDonald

9

ฉันมีปัญหาเดียวกันใน Flask

เมื่อฉันเพิ่ม:

__init__.py

เพื่อทดสอบโฟลเดอร์ปัญหาหายไป :)

แอปพลิเคชันอาจไม่รู้จักการทดสอบโฟลเดอร์เป็นโมดูล


8

ฉันแก้ไขโดยลบระดับบนสุด__init__.pyในโฟลเดอร์พาเรนต์ของแหล่งที่มาของฉัน


1
แก้ไขให้ฉัน มีคนอธิบายเรื่องนี้ได้ไหม
aboger

เจ้านี่ตรงนี้ก็แก้ไขให้ฉันด้วย แน่นอนจะชอบที่จะเห็นคำอธิบายสำหรับเรื่องนี้ถ้าใครมีมัน
king_wayne

ฉันเพิ่มinit .py แต่ยังคงประสบปัญหาเดียวกันอยู่ แต่วิธีนี้ใช้ได้ผลสำหรับฉันเช่นกัน .. ได้โปรดเถอะ
Abhijit

7

ฉันเริ่มรับConftestImportFailure: ImportError('No module named ...ข้อผิดพลาดแปลก ๆเมื่อฉันเพิ่ม__init__.pyไฟล์ไปยังไดเรกทอรี src ของฉันโดยไม่ตั้งใจ(ซึ่งไม่ควรจะเป็นแพคเกจ Python ซึ่งเป็นที่เก็บของทุกแหล่ง)


3

ฉันได้รับข้อผิดพลาดนี้เนื่องจากมีบางสิ่งที่ง่ายขึ้น (คุณสามารถพูดได้เล็กน้อย) ฉันไม่ได้ติดตั้งpytestโมดูล ง่าย ๆapt install python-pytestแก้ไขให้ฉัน

'pytest' จะได้รับการระบุไว้ใน setup.py เป็นการอ้างอิงทดสอบ ตรวจสอบให้แน่ใจว่าคุณติดตั้งข้อกำหนดการทดสอบเช่นกัน


3

ฉันมีปัญหาที่คล้ายกัน pytestไม่รู้จักโมดูลที่ติดตั้งในสภาพแวดล้อมที่ฉันทำงาน

ฉันแก้ไขมันด้วยการติดตั้งpytestในสภาพแวดล้อมเดียวกัน


แม้ว่าฉันจะใช้ pytest จากภายใน venv ฉันก็ติดตั้งทั่วโลกซึ่งทำให้ฉันข้อผิดพลาดนี้ หลังจากถอนการติดตั้งเวอร์ชันทั่วโลกและติดตั้งภายใน venv มันทำงานได้
Markus Ressel

2

สำหรับฉันปัญหาถูกtests.pyสร้างโดย Django พร้อมกับtestsไดเรกทอรี การลบการtests.pyแก้ไขปัญหา


2

ฉันได้รับข้อผิดพลาดนี้เนื่องจากฉันใช้การนำเข้าที่เกี่ยวข้องอย่างไม่ถูกต้อง ในตัวอย่าง OP test_app.py ควรนำเข้าฟังก์ชั่นการใช้เช่น

from repo.app import *

อย่างไรก็ตามไฟล์ __init__.py ที่กระจายอยู่รอบ ๆ โครงสร้างไฟล์จะไม่ทำงานและสร้างชนิดของ ImportError ที่มองเห็นนอกเสียจากว่าไฟล์และไฟล์ทดสอบจะอยู่ในไดเรกทอรีเดียวกัน

from app import *

นี่คือตัวอย่างของสิ่งที่ฉันต้องทำกับหนึ่งในโครงการของฉัน:

นี่คือโครงสร้างโครงการของฉัน:

microbit/
microbit/activity_indicator/activity_indicator.py
microbit/tests/test_activity_indicator.py

เพื่อให้สามารถเข้าถึง activity_indicator.py จาก test_activity_indicator.py ฉันต้อง:

  • เริ่ม test_activity_indicatory.py ด้วยการนำเข้าที่เกี่ยวข้อง:
    from microbit.activity_indicator.activity_indicator import *
  • วางไฟล์ __init__.py ทั่วโครงสร้างโครงการ:
    microbit/
    microbit/__init__.py
    microbit/activity_indicator/__init__.py
    microbit/activity_indicator/activity_indicator.py
    microbit/tests/__init__.py
    microbit/tests/test_activity_indicator.py

0

บ่อยครั้งที่การทดสอบถูกขัดจังหวะเนื่องจากโมดูลไม่สามารถนำเข้าได้หลังจากการวิจัยฉันพบว่าระบบกำลังดูไฟล์ในตำแหน่งที่ไม่ถูกต้องและเราสามารถเอาชนะปัญหาได้อย่างง่ายดายโดยการคัดลอกไฟล์ที่มีโมดูลใน โฟลเดอร์เดียวกันตามที่ระบุไว้เพื่อนำเข้าอย่างถูกต้อง ข้อเสนอการแก้ปัญหาอื่นจะเปลี่ยนการประกาศสำหรับการนำเข้าและแสดง MutPy เส้นทางที่ถูกต้องของหน่วย อย่างไรก็ตามเนื่องจากความจริงที่ว่าหลายหน่วยสามารถมีการพึ่งพานี้หมายความว่าเราต้องยอมรับการเปลี่ยนแปลงในการประกาศของพวกเขาเราต้องการย้ายหน่วยไปยังโฟลเดอร์


มีคำตอบอื่น ๆ ที่ให้คำถามของ OP และพวกเขาโพสต์เมื่อไม่นานมานี้ เมื่อโพสต์คำตอบโปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่มโซลูชันใหม่หรือคำอธิบายที่ดีขึ้นอย่างมากโดยเฉพาะเมื่อตอบคำถามรุ่นเก่า บางครั้งการโพสต์ความคิดเห็นในคำตอบเฉพาะจะดีกว่า
help-info.de

นอกจากความคิดเห็นจาก @ help-info.de: นี่คือลิงค์ไปยังคำแนะนำสำหรับการตอบคำถาม: stackoverflow.com/help/how-to-answer
มือของ NOD

0

ตามโพสต์บนสื่อโดย Dirk Avery (และได้รับการสนับสนุนจากประสบการณ์ส่วนตัวของฉัน) หากคุณใช้สภาพแวดล้อมเสมือนจริงสำหรับโครงการของคุณคุณจะไม่สามารถใช้การติดตั้ง pytest ได้ทั้งระบบ คุณต้องติดตั้งในสภาพแวดล้อมเสมือนจริงและใช้การติดตั้งนั้น

โดยเฉพาะอย่างยิ่งหากคุณติดตั้งไว้ในสถานที่ทั้งสองเพียงแค่เรียกใช้pytestคำสั่งจะไม่ทำงานเพราะจะใช้การติดตั้งระบบ ดังที่คำตอบอื่น ๆ ได้อธิบายไว้วิธีแก้ปัญหาง่ายๆอย่างหนึ่งก็คือรันpython -m pytestแทนที่จะเป็นpytest; ใช้งานได้เนื่องจากใช้ pytest เวอร์ชันของสภาพแวดล้อม หรืออีกวิธีหนึ่งคุณสามารถถอนการติดตั้ง pytest ของระบบได้ หลังจากเปิดใช้งานสภาพแวดล้อมเสมือนจริงอีกครั้งpytestคำสั่งควรทำงาน


python -m pytest tests/สิ่งเดียวที่ทำงานให้ฉันเพื่อให้ห่างไกลเป็น
Nik O'Lai

0

ฉันมีปัญหาเดียวกันเมื่อติดตาม Flask tutorial และฉันพบคำตอบของเอกสาร Pytest อย่างเป็นทางการ มันเปลี่ยนไปเล็กน้อยจากวิธีที่ฉัน (และฉันคิดว่าคนอื่น ๆ อีกมากมาย) เคยทำสิ่งต่าง ๆ

คุณต้องสร้างsetup.pyไฟล์ในไดเรกทอรีรากของโครงการอย่างน้อยสองบรรทัดต่อไปนี้:

from setuptools import setup, find_packages
setup(name="PACKAGENAME", packages=find_packages())

โดยที่ PACKAGENAME เป็นชื่อแอปของคุณ จากนั้นคุณต้องติดตั้งด้วย pip:

pip install -e .

การ-eตั้งค่าสถานะบอกให้ pip ทำการแพคเกจภายในโหมดที่แก้ไขได้หรือ "พัฒนา" ดังนั้นครั้งต่อไปที่คุณเรียกมันควรจะหาแอปของคุณในมาตรฐานpytestPYTHONPATH


0

ทางออกของฉัน:

สร้างconftest.pyไฟล์ในtestไดเรกทอรีที่มี:

import os
import sys
sys.path.insert(0,os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/code/")

สิ่งนี้จะเพิ่มโฟลเดอร์ที่น่าสนใจให้กับเส้นทางของไพ ธ อนโดยไม่ต้องแก้ไขไฟล์ทดสอบทุกไฟล์การตั้งค่าตัวแปร env หรือ messing ด้วยพา ธ สัมบูรณ์ / สัมพัทธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.