使用 pathlib 添加目录到 sys.path

Adding a directory to sys.path with pathlib

我正在尝试使用如下代码将目录添加到 PATH:

PROJECT_DIR = Path(__file__).parents[2]
sys.path.append(
    PROJECT_DIR / 'apps'
)

没用。如果我打印 sys.path 我会看到这样的东西:

[..., PosixPath('/opt/project/apps')]

我应该如何修复此代码?写str(PROJECT_DIR / 'apps')正常吗?

您需要将路径作为字符串附加到 sys.path:

PROJECT_DIR = Path(__file__).parents[2]
sys.path.append(
    str(PROJECT_DIR / 'apps')
)

PROJECT_DIRPosixPath 的实例,它具有 /parents 等所有优点,但如果需要,您需要将其转换为常规字符串要使用的地方是预期的字符串 - 例如 sys.path.

project_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)),"..","..")
sys.path.append(os.path.join(project_dir,"apps"))
#or maybe you need it at the start of the path
sys.path.insert(0,os.path.join(project_dir,"apps"))

你为什么要使用这个奇怪的 pathlib 库而不是 python 完美的路径实用程序?

您也可以使用 os.fspath。它 return 路径的文件系统表示。

import os
    
PROJECT_DIR = Path(__file__).parents[2]
APPS_DIR = PROJECT_DIR / 'apps'
sys.path.append(os.fspath(APPS_DIR))

文档: https://docs.python.org/3/library/os.html#os.fspath

即将在 sys.path 上支持类似路径的对象(请参阅 this pull request),但还没有。