无法通用导入Python包

2024-03-05

假设我有以下目录结构:

workspace/
  __init__.py
  ys_manage/
    __init__.py
    manage.py
  ys_utils/
    __init__.py
    project_dicts.py

现在,假设我需要访问project_dicts.py in manage.py。还有,我的$PATH包括/home/rico/workspace/ys_manage.

我需要能够跑步manage.py从我机器上的任何目录仍然可以访问project_dicts.py.

My $PYTHONPATH只有/home/rico/workspace.

如果我将以下内容包含在manage.py我可以运行该文件~/workspace/ys_manage但其他地方没有。

import sys
sys.path.append('..')
from ys_utils import project_dicts

看来'..'给出文件运行目录的相对路径,而不是文件所在目录的相对路径。它是否正确?

我想尝试使用ys_manage/__init__.py导入project_dicts.py这样它就可以在manage.py普遍。这是一个好主意吗?

我从来没有用过__init__.py对于“包创建者”以外的任何人。也就是说,我从未将它用于初始化目的。也许我做错了。

内容ys_manage/__init__.py:

import sys
sys.path.append('..')
from ys_utils import project_dicts

我应该包括一些东西吗manage.py寻找这个进口?

当我尝试跑步时manage.py我收到以下错误:

NameError: global name 'project_dicts' is not defined

作为次要问题,我需要workspace/__init__.py?我真的不想拥有它,因为ys_manage and ys_utils(以及大约十几个其他软件包)都在修订控制之下并由其他几个开发人员使用......workspace is not.


一般来说,我发现尝试使用相对路径进行导入是危险的并且非常容易出错。我建议将工作区放在 PYTHONPATH 上(或者以编程方式将其添加到__init__.py)并导入与该静态位置相关的所有内容。它还将使您的代码更易于阅读,因为您将能够更快、更清晰地追踪导入的来源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通用导入Python包 的相关文章

随机推荐

  • 如何使用 pd.Grouper 按月对日期进行分组?

    我搜索了 stackoverflow 以了解如何按月对 DateTime 进行分组 由于某种原因 即使在我传递数据帧之后 我仍然收到此错误pd to datetime 类型错误 仅对 DatetimeIndex TimedeltaIndex
  • Django 会话过期?

    从 django 的文档中 我的印象是调用 request session set expiry 300 从一种观点来看 会导致会话在五分钟后过期不活动 但是 这不是我在 django trunk 中遇到的行为 如果我从一个视图调用此方法
  • 如何配置 ckeditor 不将内容换行到

    块中?

    我在用ckeditor http ckeditor com 在我的网站上 让用户更容易输入 HTML 但是 我从 ckeditor 返回的数据包含在 p p 块 这是我不想要的 是否有一些配置设置强制编辑器不将文本换行 将以下内容添加到您的
  • GridLayout(不是GridView)如何均匀拉伸所有子项

    我想要一个 2x2 的网格 里面有一个按钮 这只是 ICS 所以我尝试使用给出的新 GridLayout 这是我的布局的 XML
  • 从 RxJS Observable 中过滤未定义的内容

    是否有特定的习惯用法或实用程序用于过滤undefined从 RxJS 可观察到的 这段代码具有我想要的行为 obs pipe filter x gt x undefined 一些替代方案是 obs pipe filter x gt x fo
  • 脚本的布尔参数

    在 Python 中 我了解如何将 int 和 str 参数添加到脚本中 parser argparse ArgumentParser description Mydescription parser add argument l type
  • Elasticsearch - 每个文档的匹配数

    我使用此查询来搜索字段中出现的短语 query match phrase content my test phrase 我需要计算每个文档的每个短语发生了多少次匹配 如果这可能的话 我考虑过聚合器 但认为它们不满足要求 因为它们会给我整个索
  • 如何在 Nextjs 中切换类并更改 CSS?

    我正在开发一个 Next js 项目 其中菜单打开时显示 p 切换菜单类 我设法做到了这一点 但是当我在 CSS 中添加该类时 它没有考虑这两个类 这是我的代码 成分 import useState from react import st
  • 将不完整的嵌套列表放入矩形 ndarray 中

    在Python 也使用numpy 中 我有一个列表列表的列表 每个列表的长度不同 header1 header2 item1 value1 header1 header2 header3 item2 value2 item3 value3
  • Haskell:最简单的 wai 示例的问题

    我是 Haskell 新手 我正在尝试让 wai 包正常工作 因为我对使用 Haskell 进行 Web 应用程序感兴趣 我尝试从第一个 最简单的例子开始wai http github com snoyberg wai主页 1 LANGUA
  • SQL Server 字符串执行带有输出参数的过程

    如何将输出参数与 String Exec 一起使用 考虑使用 标准 语法进行以下查询 DECLARE testString nvarchar 50 EXEC testProcedure param1 testString OUTPUT SE
  • MSVSP100D.dll 缺少在窗口 8 中与 opencv 2.4.1 配合使用 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有以下场景 我正在尝试在 Wind
  • 使用 Cargo 时如何获得带有调试信息的发布版本?

    以下命令 cargo build 产生一个未优化 build with调试信息 相反 cargo build release 产生一个优化 build without调试信息 有没有一种方法可以产生优化 build with调试信息 我需要
  • Heroku 上的 Radiant 扩展?

    有人有过将 Radiant CMS 扩展实际应用到 Heroku 实例上的经验吗 我尝试删除子模块并将文件添加回来 但运气不太好 Heroku 目前不支持 git 子模块 然而 他们的 优秀的 文档表达了解决这个问题的方法 在这里查看 ht
  • 删除 .svn/pristine 的内容是否安全?

    我正在使用一个大型应用程序 我从我的存储库中签出了该应用程序的大部分内容 svn pristine文件夹 据我了解 原始文件夹包含我的workingCopy目录中的文件副本 话虽如此 删除这些文件可以吗 我真的需要它们吗 我已经备份了文件
  • 如何在 C# 中修改装箱值而不创建新对象?

    如何在 C 中修改装箱值而不创建新对象 例如 如果我有object o 5 我想改变盒装的值5 to 6 我怎样才能做到这一点 The o 6 将在堆上创建一个新对象并将对该对象的引用分配给o 还有其他方法可以更改盒装值吗 你可以自己 拳击
  • 从 ansible 运行 powershell 脚本并注册输出

    我正在尝试运行一个 Powershell 脚本 该脚本在远程 Windows PC 上使用 ansible 从 MSI 文件读取 ProductGUID powershell 在本地工作台上作为 ps1 文件运行 但从 ansible 中它
  • 请求超时并显示代码

    Error Domain NSURLErrorDomain Code 1001 The request timed out UserInfo NSUnderlyingError 0x608000244a70 Error Domain kCF
  • Spring Boot JSF 集成

    环境 雄猫8 春季启动 1 5 JSF 2 2 阿帕奇 MyFaces 春季MVC Code 我正在 Servlet 3 0 环境中集成 Spring Boot 和 JSF 2 2 配置类 JSFConfig java JSF 的配置 Co
  • 无法通用导入Python包

    假设我有以下目录结构 workspace init py ys manage init py manage py ys utils init py project dicts py 现在 假设我需要访问project dicts py in