python - python中的相对导入与本地ang全局库
问题描述
我的应用程序是这样组织的:
apps/
code/
libglobal/
funglobal.py
tests/
project/
liblocal/
funlocal.py
main.py
在main.py我有:
import liblocal.funlocal
在funlocal.py我尝试导入funglobal.py:
from ....code.libglobal import funglobal
当我跑
python3 -B tests/project/main.py
我收到一个错误:
from ....code.libglobal import funglobal
ValueError: attempted relative import beyond top-level package
我已经阅读了很多关于python3相对导入的信息,但仍然没有找到如何在不彻底改变应用程序组织的情况下解决这个错误。有什么解决办法吗?
解决方案
由于正在执行的脚本将其__name__
设置为__main__
并将自己定义为位于包的顶层,因此它拒绝识别同级目录中的脚本。
sys.path
您可以通过hack解决此问题:
import sys, os
sys.path.insert(0, os.path.abspath('../..'))
或此答案中提供了与 setuptools 的有趣替代方案。
推荐阅读
- python - 如何在调试 cpython 时遍历 Python 操作码?
- javascript - 如何修复 Umbraco 中的以下 jQuery Validate 问题?
- java - Java 优化算法
- db2 - Db2 for I:Cpyf *nochk 仿真
- java - RestAssured 中的超时错误,而服务在 postman/soapUI 中给出响应
- vue.js - $refs.myChildComponent 未定义,尽管我在控制台中看到它
- java - 我将如何使用 Java 技术将图书馆管理系统开发为 Web 应用程序
- javascript - 初始化 jquery 插件时设置 scrollTop
- ehcache - 如何使用 EhCache3 在 Spring Boot 2 中从外部位置加载 ehCache.xml
- angular - 模块“ComponentsModule”声明的意外值“DecoratorFactory”