处理 Python 导入时,遇到同级包导入问题可能会令人沮丧。让我们探索一种替代可怕的 sys.path.insert hack 的方法来解决此问题。
考虑以下项目结构:
├── LICENSE.md ├── README.md ├── api │ ├── __init__.py │ ├── api.py │ └── api_key.py ├── examples │ ├── __init__.py │ ├── example_one.py │ └── example_two.py └── tests │ ├── __init__.py │ └── test_one.py
当您尝试从示例和测试目录中的 api 模块导入时,您可能会遇到如下错误:
ModuleNotFoundError: No module named 'api'
这里有一个 Pythonic,而不是诉诸 sys.path hacks解决方案:
第 1 步:创建 pyproject.toml 文件
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"</p> <p><strong>第 2 步:使用 pip -e 安装</strong></p> <p>如果需要,激活您的虚拟环境,然后将您的项目安装在可编辑的环境中state:</p> <pre class="brush:php;toolbar:false">pip install -e .
第 3 步:调整导入
修改以前无法从 api 模块导入的文件中的导入以包含项目名称,例如:
from myproject.api.api import function_from_api
a pi.py
def function_from_api(): return 'I am the return value from api.api!'
test_one.py
from myproject.api.api import function_from_api def test_function(): print(function_from_api()) if __name__ == '__main__': test_function()
运行测试
确保您仍在虚拟环境中并执行以下操作:
python .\myproject\tests\test_one.py
输出:
I am the return value from api.api!
以上是在 Python 中导入同级包时如何避免'sys.path”黑客攻击?的详细内容。更多信息请关注PHP中文网其他相关文章!