集成同级包并从不同目录执行脚本可能具有挑战性。本指南提供了一个详细的解决方案,可以避免臭名昭著的 sys.path 黑客攻击。
考虑以下目录结构:
├── 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
第 1 步:创建 pyproject.toml文件
在根目录中,创建一个 pyproject.toml 文件,其中包含以下最少内容:
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] build-backend = "flit_core.buildapi" requires = ["flit_core >=3.2,<4"]
步骤 2:使用虚拟环境(推荐)
创建并激活虚拟环境以实现隔离和依赖
第 3 步:安装您的项目
使用 pip 以可编辑状态安装项目:
pip install -e .
第 4 步:添加我的项目。前缀
在相对或绝对导入失败的导入中,将 myproject 前缀添加到导入语句中:
from myproject.api.api import function_from_api
api.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()
导航到测试目录并执行test_one.py:
python .\myproject\tests\test_one.py
此解决方案提供了一种干净且可移植的方式来导入兄弟包,而无需 sys.path 操作。通过利用 pyproject.toml 并可编辑地安装项目,您可以确保对脚本的更改自动反映在已安装的包中。这种方法简化了开发并简化了项目管理。
以上是如何在不使用'sys.path”黑客的情况下有效地在 Python 中导入同级包?的详细内容。更多信息请关注PHP中文网其他相关文章!