【问题标题】:How to import python module in a shared folder?如何在共享文件夹中导入 python 模块?
【发布时间】:2009-07-28 21:01:47
【问题描述】:

我在 Windows 机器上的共享文件夹中有一些 python 模块。

文件是\mtl12366150\test\mymodule.py

os.path.exists 告诉我这条路径是有效的。

我将文件夹 \mtl12366150\test 附加到 sys.path (并且 os.path.exists 告诉我此路径有效)。

当我尝试导入 mymodule 时,我收到一条错误消息,提示该模块不存在。

有没有办法导入位于共享路径中的模块?

【问题讨论】:

  • 我应该为我的问题添加一些上下文:) 我们的应用程序为用户提供了一些实用程序脚本。我们希望这些脚本位于共享文件夹中,以便所有用户都可以轻松访问它们。我尝试使用正斜杠。它没有用。我尝试修改 PYTHONPATH。它没有用。我确信路径已正确转义。 os.path.exists 确认路径是有效的。我可以在这个文件夹中执行文件(或者在它们上使用 open()。我唯一的问题是从这个路径导入模块!

标签: python import directory shared


【解决方案1】:

您是否忘记在附加的 sys.path 组件中使用原始字符串或转义反斜杠?请记住,"\t" 是一个制表符,而 r"\t" 或 "\t" 是一个反斜杠,后跟一个制表符。

在大多数应用程序中,即使对于 Windows 路径,您实际上最好使用正斜杠而不是反斜杠,并且大多数 Windows API 都可以接受它们。否则,请小心使用原始字符串!

[简单Python模块上面的目录不需要添加__init__.py文件]

【讨论】:

    【解决方案2】:

    你说 os.path.exists() 说路径在那里,但你确定你逃脱了 \ 吗?试试这个:

    sys.path.append('\\mtl12366150\\tes')
    

    【讨论】:

    • 如果你真的想使用反斜杠,只需使用 r"\mtl12366150\test"。当然,更好的建议是使用正斜杠。
    【解决方案3】:

    要导入 python 项目,需要在其上方的每个文件夹中都有一个 __init__.py 文件,以表明它是一个有效的 python 包。

    __init__.py 文件可以是空的,它们只是为了显示结构。

    \mtl12366150
      __init__.py
      \test
        __init__.py
          \mymodule.py
    

    【讨论】:

    • 这不是真的。如果你做 sys.path.append("mtl12366150/test"),那些目录不需要是包。
    • 他是直接导入单个文件,而不是包目录。 init 不相关。
    【解决方案4】:

    正如 S.Lott 所说,最好的方法是设置 PYTHONPATH 环境变量。我没有方便的 windows 框,但从您的命令提示符下看起来像这样:

    c:> SET PYTHONPATH=c:\mtl12366150\test
    c:> python
    >>> import mymodule
    >>>
    

    【讨论】:

    • 你不想追加到PYTHONPATH而不是全部覆盖吗?
    • @Evan Fosmark:视情况而定。 80%的时间,它没有被使用。大多数软件包都安装在 lib/site-packages 中。实际上,很少有任何预先存在的系统范围的 PYTHONPATH。我们通常只安装包,而不是设置系统范围的路径。
    【解决方案5】:

    我想我找到了答案。我使用的是 Python 2.6.1,现在使用 Python 2.6.2 可以正常工作。我对 python 2.5.4 有同样的错误行为。

    【讨论】:

      【解决方案6】:

      “我附加到 sys.path ...”

      请不要。

      从您的应用程序外部设置PYTHONPATH 环境变量。

      【讨论】:

      • 不,有完全正当的理由附加到 sys.path。只是不要 prepend 路径,因为那样你将覆盖用户设置的任何 PYTHONPATH;那些应该优先。无论如何,这与问题无关。
      • @Glenn Maynard:“与问题无关”也许不是。也许尝试更新 sys.path 的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多