0

我有以下目录结构:

TestFolder:
    test.py
CommonFolder:
    common.py

在中test.py,我需要导入common.py.

为了做到这一点,test.py我将路径添加CommonFolder到系统路径中。

这是我开始的:

sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'CommonFolder'))

然后我认为这/在几乎每个操作系统中都是有效的分隔符,所以我将其更改为:

sys.path.append(os.path.dirname(os.path.dirname(__file__)) + '/CommonFolder')

然后我认为这..也是几乎每个操作系统中的有效语法,所以我将其更改为:

sys.path.append(os.path.dirname(__file__) + '/../CommonFolder')

我的问题:

  1. 我上面的假设是否正确,并且代码会在每个操作系统上正确运行吗?
  2. 在我的最后一次更改中,我基本上为系统路径添加了一条稍长的路径。更准确地说 -FullPath/TestFolder/../CommonFolder而不是FullPath/CommonFolder. 对此有任何运行时影响吗?我想每条import语句的执行速度可能会稍微慢一些,但即使是这样,那也是次要的。有什么好的理由不这样做吗?
4

2 回答 2

1

如果您正在编写跨越多个操作系统的代码,最好不要尝试自己构建路径。在 Linux 和 Windows 之间,您会立即遇到正斜杠与反斜杠的问题,例如。

我建议查看 Pythonpathlib库。它处理为不同操作系统生成路径。

https://docs.python.org/3/library/pathlib.html

这是一个关于这个主题以及如何使用该库的精彩博客: https ://medium.com/@ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-在 Windows-mac-and-linux-11a072b58d5f

更新:

用更具体的答案更新它。

关于目录路径,只要您不自己构建路径(使用诸如 pathlib 之类的实用程序),您创建的路径应该没问题。Linux、Mac 和Windows都支持相对路径(当然,mac 和 linux 都是基于 Unix的)。

至于它是否高效,除非您经常动态加载或重新加载源文件(这并不常见),否则大多数文件在代码运行之前就已加载到内存中,因此在设置文件路径时不会影响性能这边走。

于 2018-06-26T13:30:50.160 回答
0

用于os.path.join()独立于操作系统的路径分隔符,而不是/

例子:os.path.join(os.path.dirname(__file__),"..","CommonFolder")

或者,您可以通过在 CommonFolder 中按名称放置一个空文件来将 CommonFolder 制作为 python 包__init__.py。之后,您可以简单地import common输入test.py:-

from CommonFolder import common
于 2018-06-26T13:35:49.117 回答