从命令行运行脚本时,从同级包导入模块通常会带来挑战。为了缓解这些困难,我们提出了一种替代解决方案,消除了笨拙的 sys.path.insert hacks 的需要。
我们将将我们的代码打包到一个文件夹中并将其结构为如下:
<br>└── myproject</p> <pre class="brush:php;toolbar:false">├── api │ ├── api_key.py │ ├── api.py │ └── __init__.py ├── examples │ ├── example_one.py │ ├── example_two.py │ └── __init__.py ├── LICENCE.md ├── README.md └── tests ├── __init__.py └── test_one.py
此外,我们将创建一个 pyproject。根文件夹中的 toml 文件来描述package.
为了使我们的包可用于导入,我们将使用 pip 以可编辑状态安装它: p>
pip install -e .
当从我们的包中导入模块时,我们将在导入前添加 myproject. 前缀,如 test_one.py 中所示:< ;/p>
从 myproject.api.api 导入function_from_api
请注意,只有对于没有 pyproject.toml 文件和 pip install 就无法工作的导入,此前缀才是必需的。
完成所有必要的设置后,我们可以从命令行:
python .myprojectteststest_one.py
这应该输出预期的结果:
我是返回值api.api!
通过合并这些步骤,我们已经有效解决了同级包导入的问题,现在可以从命令行,无需求助于 sys.path hacks。
以上是从同级包导入时如何避免'sys.path”黑客攻击?的详细内容。更多信息请关注PHP中文网其他相关文章!