【问题标题】:How to use PYTHONPATH to import the whole folder in Python如何使用 PYTHONPATH 在 Python 中导入整个文件夹
【发布时间】:2014-06-24 01:18:37
【问题描述】:

我是 python 新手,正在尝试将项目文件夹添加到 PYTHONPATH。我创建了一个 .pth 文件并将文件的根路径添加到我的站点包文件夹中。但是,当我尝试导入此文件夹中的 .py 文件时,只能导入位于根文件夹下的文件(例如“/sample”),但无法导入 /sample 文件夹下的那些子文件夹(例如例如 /sample/01)。所以我的问题是什么文件以及如何更改它以使我的整个文件夹(包括其所有子文件夹)都可以导入。

在最坏的情况下,我能想到的是写下站点包中 .pth 文件中的所有文件夹名称。但我只是相信 Python 会提供一种更有效的方式来实现这一点。

【问题讨论】:

  • 如果我的理解正确,您希望 sample/a.pysample/x/b.pysample/y/z/c.py 可以导入为 import a,b,c

标签: python import pythonpath


【解决方案1】:

我从来没有使用过 .pth 文件。我更喜欢双管齐下的方法:

  • 使用运行 env pythonshebang,因此它使用路径上的第一个 python,即:

#!/usr/bin/env python

  • 使用 virtualenv 将不同的环境分开,并将任何给定程序/程序集的必要库组合在一起。这有一个额外的好处,即 requirements 文件(来自 pip freeze 输出)可以存储在源代码管理中,并且可以在任何地方轻松地重新创建环境,例如用于Jenkins 测试等。

virtualenv 的情况下,python 解释器可以从 virtualenvbin 目录中显式调用。

对于这种情况下的本地模块,可以使用本地 PyPI 服务器来集中自定义模块,它们也可以包含在 requirements 文件中(通过 - -pip 的额外索引选项)。

根据 OP 的评论回复编辑:

我以前没有使用过 SublimeREPL,但是,根据您描述的场景,我认为总体上最简单的方法可能是简单地将目录 symlink 到您的 site-packages(或 dist-packages,视情况而定)目录。

对于生产服务器来说,这不是一个理想的场景,但出于您的目的,在客户端机器上,我认为它会很好。如果您不想使用文件夹名称,即import ch1/foo,则需要在这些目录中进行符号链接,以便您可以简单地使用import foo。如果您可以使用目录名称,即import ch1/foo,那么您应该只需要符号链接顶级代码目录。

【讨论】:

  • 感谢您的指导,Ken,但我现在有点难以理解。我想我应该提供更多背景信息:我正在使用带有 REPL 的 SublimeText3。我已经将 SublimeREPL 设置为使用我想要的 python 解释器 /home/myname/anaconda/bin/python。我正在学习用 Python 构建机器学习系统的教科书。源代码按章节放在不同的文件夹中:ch01、ch02 等。它们都在一个主文件夹 /code 下。那么导入文件夹 /code 以便我可以使用其中的所有文件而不指定子文件夹名称和路径的最佳方法是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2019-09-25
  • 1970-01-01
  • 2013-06-03
  • 2019-11-24
  • 2017-02-02
相关资源
最近更新 更多