1 回答

TA貢獻1876條經驗 獲得超5個贊
理想情況下,測試應在“清潔環境”中進行。因此,與其使用相對導入運行腳本測試,不如編寫一個以模塊形式在本地安裝項目。然后,您可以編寫單獨的測試,您可以在其中執行。setup.pyfrom mymodule import script1.script1
如果你走這條路,你需要決定一個項目結構。沒有最好的結構(見這里)。舉個例子,這是我的典型結構:
├── src/
│ ├── script1/
│ │ └── script1.py
│ └── script2/
│ └── script2.py
├── tests/
│ ├── test_script1.py
│ └── test_script2.py
└── venv/
以及如下 setup.py:
import os
from setuptools import find_packages, setup
# load desc from readme
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(
name="mymodule",
version="0.0.1",
author="you",
author_email="<[email protected]>",
description=("short description"),
license="<none>",
packages=find_packages("src"),
package_dir={"": "src"},
long_description=read("README.md"),
classifiers=[
"Development Status :: 2 - Pre-Alpha",
"Topic :: Utilities",
# "License :: OSI Approved :: MIT License",
],
install_requires=[],
)
通過此示例,您現在可以運行以安裝 mymodule,然后使用 運行所有測試。這不僅可以測試您的測試,還可以檢查您的軟件包是否正確安裝/可安裝。使用虛擬環境時,將安裝在此處而不是整個系統。
最后,您可以在所有文件中使用相對導入,因為您將擁有一個頂級模塊“mymodule”,并且您的錯誤將消失。python setup.py installpytest testssetup.py
PS:如果您不喜歡導入,可以在目錄中寫入文件,以便能夠做到甚至script1.script1__init__.pyfrom mymodule import script1from mymodule import ClassFromScript1
添加回答
舉報