【问题标题】:Python: Create virtual import pathPython:创建虚拟导入路径
【发布时间】:2011-11-17 21:23:37
【问题描述】:

有没有办法在 Python 中创建虚拟导入路径?

我的目录结构是这样的:

  • /
    • 本机
      • 脚本
        • some.py
        • 另一个.py
      • [其他不相关的目录]

根是执行程序的目录。 Atm 我将native/scripts/ 添加到搜索路径中,这样我就可以使用import some, another 而不是from native.scripts import some, another,但我希望能够这样做:

from native import some
import native.another

有什么办法可以做到吗?


相关问题:
Making a virtual package available via sys.modules

【问题讨论】:

    标签: python import


    【解决方案1】:

    为什么不将some.py 和another.py 移到native 目录中,以便一切正常工作,以便以后返回源代码的人不会对为什么可以导入和不可导入感到困惑? :)

    更新:

    感谢您的 cmets;他们有用地澄清了这个问题!在您的情况下,我通常将我可能想要导入的函数和类放在我可以轻松访问它们的native.some 中。但后来我得到了脚本代码,only 得到了脚本代码——只有解释参数并通过将这些参数作为参数传递给main() 或go() 函数来启动一切运行的薄垫片——然后放那个在scripts 目录中。这使外部接口代码与您可能要导入的代码完全分开,这意味着您不必试图欺骗 Python 一次在多个地方拥有模块。

    【讨论】:

    • 为什么不把所有的文件都放在根目录下就可以了。 ;)
    • 我将文件保存在根目录之外,以避免与标准库和我可能需要的 PyPI 中的第 3 方模块发生名称冲突——我最终只在顶层取出一个名称,而不是几个.这就是为什么。 :)
    • 我写的是一个嵌入 Python 的应用程序,而不是用 Python 编写的。在我的特定上下文中,如果我可以通过 native 包引用本机脚本,而不污染目录本身,事情会好得多。
    【解决方案2】:

    在/native/__init__.py 中,包括:

    from scripts import some, another
    

    【讨论】:

    • 请注意,只有当他在scripts 内部也有一个__init__.py 时,这才有效。 (也许这对他来说很明显?)另外,这意味着脚本不是按需导入的,而是总是在native 本身被导入的那一刻被导入;但在大多数情况下,这并不重要。
    • 这是一种解决方案,但我不能这样做import native.some —我也希望能够做到这一点。
    • @Paul 那你为什么不把some.py 和other.py 移到native/ 呢?看起来这就是你真正想要的。
    • @phihag 那只会让native 非常混乱。 Native 包含一些其他子目录,例如 animations、screens、sounds。如果脚本也有自己的子目录,我会喜欢它。
    猜你喜欢
    • 2013-04-09
    • 2012-07-17
    • 2015-01-18
    • 1970-01-01
    • 2013-02-28
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多