当前位置: 首页 > 面试题库 >

Python包结构

全心思
2023-03-14
问题内容

我有一个带有几个子包的Python包。

myproject/
  __init__.py
  models/
    __init__.py
    ...
  controllers/
    __init__.py
    ..
  scripts/
    __init__.py
    myscript.py

在myproject.scripts.myscript中,如何访问myproject.models?我试过了

from myproject import models # No module named myproject
import models # No module named models
from .. import models # Attempted relative import in non-package

我以前必须解决此问题,但我永远不记得应该怎么做。这对我来说并不直观。


问题答案:

这是正确的版本:

from myproject import models

如果失败,ImportError: No module named foo则是因为尚未设置PYTHONPATH包含的目录myproject/

恐怕其他人会建议一些技巧,让您避免设置PYTHONPATH。我敦促您不要理them它们。这就是PYTHONPATH存在的原因:告诉Python在哪里寻找要加载的代码。它功能强大,文档合理,可移植到许多环境中。人们为了避免设置技巧而玩技巧并不是这些。

显式相对进口
工作,即使没有PYTHONPATH被设置,因为它可能只是走了目录层次结构,直到找到合适的位置,它并不需要找到顶部,然后往下走。但是,它在您作为命令行参数传递给python(或等效地,直接用#!/usr/bin/python一行调用)的脚本中不起作用。这是因为在这两种情况下,它都成为__main__流程的模块。无处可走__main__-它已经在顶部了!如果您通过
导入 该模块在脚本中调用代码,那么就可以了。也就是说,比较:

python myproject/scripts/myscript.py

python -c 'import myproject.scripts.myscript'

您可以通过不直接执行脚本模块,而是创建一个bin/myscript执行导入并可能调用主函数的方法来利用此功能:

import myprojects.scripts.myscript
myprojects.scripts.myscript.main()

比较一下Twisted的命令行脚本的定义方式:http
:
//twistedmatrix.com/trac/browser/trunk/bin/twistd



 类似资料:
  • 本文向大家介绍Python中的闭包总结,包括了Python中的闭包总结的使用技巧和注意事项,需要的朋友参考一下 前几天又有人在我的这篇文章 python项目练习一:即时标记 下留言,关于其中一个闭包和re.sub的使用不太清楚。我在自己的博客上搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善博客上Python的内容。 1. 闭包的概念 首先还得从基本概念说起,什么是闭包呢?来看下维基上

  • 运行时的基本检查 节点版本(>= 4) CLI 参数检查 包含所有可用和支持的CLI参数 检是否有冲突和弃用 统一存放日志 统一存放npmlog, winston和appium-logger 启动AppiumDriver(继承Basedriver) 为iOS/Android/Selendroid/Fake Driver 建立会话 创建/删除Appium会话 启动baseServer (appium

  • 包名 描述 aop 拦截器框架 castors 帮助你把任何类型转换成任何类型,从而让 Java 的类型不是那么的"强" dao 数据库访问接口,更薄,更简单轻便 el 嵌入式表达式引擎 filepool 文件池接口以及默认实现 http 简单的Http客户端工具类,帮助你发送 HTTP 请求 ioc Ioc 容器,你懂得 json JSON 的解析器和渲染器 lang 让 Java 的语法更加友

  • 问题内容: 我刚刚开始熟悉Cython,尝试将一些结构从C库包装到Python方法和类。我真正不了解的是从(初始化的)C结构到相应的Python类的转换应该如何工作。我在这里想念的是什么: C头文件中的片段: 我的.pxd对应的代码段: 我的.pyx: 直到return语句的所有内容都可以正常工作。我在等中获得了正确的值。但是return语句中的强制转换似乎不正确或缺少更多信息。发出Python段

  • 问题内容: 我正在尝试学习Go并遵循现有的约定,但是,作为每个约定,您都需要先了解它们,然后才能很好地使用它们,经过一些研究,我没有找到以下问题的确切答案: 我已经在自己的内部建立了一个类似以下结构的项目: 我的主要是: 因此,问题是: 我读到我需要在每个package文件夹中都有一个文件,对吗? 如果是这样,在内部,我将如何导入,以及? 然后,是否可能会有类似的内容: …并且主要是做什么的? 问

  • 问题内容: 给你 为什么不选择1-11? 他们是只是决定随机执行此操作,还是有一些我没有看到的价值? 问题答案: 因为调用包含10个等于的元素更为常见。请记住,程序员更喜欢基于0的索引。 另外,请考虑以下常见代码段: 你能看到如果精确到这将是有问题的吗?程序员需要显式减1。这也遵循程序员喜欢的共同趋势。 如果你经常以1开头的范围调用范围,则可能需要定义自己的函数: