什么时候假设使用破折号 m 并避免使用 __init__?
When to assume dash m usage and avoid __init__?
对于Python 3.
我刚开始学习Python。我有 PHP 和 Ruby 背景。
目前对模块非常困惑,__init__
和 python -m
。
目前我有以下内容:
modules/practice.py
tests/test_practice.py
在practice.py
class First:
def attempt(self):
return 'attempted'
测试中_practice.py
from modules.practice import First
class TestMain:
def test_attempt(self):
first = First()
attempted = first.attempt()
assert attempted is 'attempted'
当我 运行 pytest
我得到一个错误 ModuleNotFoundError: No module named 'modules
当我运行python -m pytest
测试是绿色的
但是,如果我在模块和测试中添加 __init__.py
个文件,两者都是绿色的。
在尝试自己找出答案后,我承认我不确定自己是否明白了。
为什么 pytest
在没有 __init__
的情况下不起作用?
在处理项目时,当人们认为 python -m
将被使用,而当人们添加 __init__.py
文件时?
不要将 __init__.py
文件添加到 tests
目录中。
您应该将 __init__.py
文件添加到 modules
目录中。
理想情况下,应该可以使用 pytest
或 python -m pytest
运行 测试套件。为此,modules
的父目录需要出现在 sys.path
上。通常你会通过为包编写一个 setup.py
文件并以“可编辑”模式安装你的代码来做到这一点。针对站点包中链接的已安装代码的测试 运行。
如果你不想在这个阶段写一个setup.py
文件,你可以导出一个环境变量:
export PYTHONPATH=/path/to/parent_of_modules
或者您可以直接从 conftest.py
文件注入到 sys.path
,该文件首先导入:
.
├── modules
│ ├── __init__.py
│ └── practice.py
└── tests
├── conftest.py
└── test_practice.py
示例:
# conftest.py
import os
import sys
here = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(here))
对于Python 3.
我刚开始学习Python。我有 PHP 和 Ruby 背景。
目前对模块非常困惑,__init__
和 python -m
。
目前我有以下内容:
modules/practice.py
tests/test_practice.py
在practice.py
class First:
def attempt(self):
return 'attempted'
测试中_practice.py
from modules.practice import First
class TestMain:
def test_attempt(self):
first = First()
attempted = first.attempt()
assert attempted is 'attempted'
当我 运行 pytest
我得到一个错误 ModuleNotFoundError: No module named 'modules
当我运行python -m pytest
测试是绿色的
但是,如果我在模块和测试中添加 __init__.py
个文件,两者都是绿色的。
在尝试自己找出答案后,我承认我不确定自己是否明白了。
为什么 pytest
在没有 __init__
的情况下不起作用?
在处理项目时,当人们认为 python -m
将被使用,而当人们添加 __init__.py
文件时?
不要将 __init__.py
文件添加到 tests
目录中。
您应该将 __init__.py
文件添加到 modules
目录中。
理想情况下,应该可以使用 pytest
或 python -m pytest
运行 测试套件。为此,modules
的父目录需要出现在 sys.path
上。通常你会通过为包编写一个 setup.py
文件并以“可编辑”模式安装你的代码来做到这一点。针对站点包中链接的已安装代码的测试 运行。
如果你不想在这个阶段写一个setup.py
文件,你可以导出一个环境变量:
export PYTHONPATH=/path/to/parent_of_modules
或者您可以直接从 conftest.py
文件注入到 sys.path
,该文件首先导入:
.
├── modules
│ ├── __init__.py
│ └── practice.py
└── tests
├── conftest.py
└── test_practice.py
示例:
# conftest.py
import os
import sys
here = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(here))