【问题标题】:Adding a directory to sys.path with pathlib使用 pathlib 将目录添加到 sys.path
【发布时间】:2015-12-18 12:09:18
【问题描述】:

我正在尝试使用这样的代码将目录添加到 PATH:

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

它不起作用。如果我打印 sys.path 我会看到这样的内容:

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

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

【问题讨论】:

标签: python pathlib


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      【解决方案3】:

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

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

      PROJECT_DIRPosixPath 的实例,它具有/parents 等所有优点,但如果您想在某个地方使用字符串,则需要将其转换为常规字符串——比如sys.path.

      【讨论】:

      • 在将路径添加到 sys.path 之前,您可能需要 resolve() 路径。这使它成为绝对的——文件并不总是绝对的。
      • @florisla 因为这是在运行时完成的,所以没有必要这样做(只要您在导入模块之前不移动它们)。
      【解决方案4】:
      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 的完美路径工具?

      【讨论】:

      • 可能是个人喜好问题 - pathlib 相当不错!
      • 我猜你在回答中错过了这部分.parents[2]
      • @Joran Beasley:一定要留下答案! os.path 确实是一个完美的图书馆!对于 python pathlib 的东西都不起作用。
      • 除了它显然会导致使用内置函数不会出现的错误......而且这些错误太难了,你不得不来寻求帮助:P但是是的,我明白了......我猜猜......当他们为手头的任务工作时,我仍然建议使用内置函数@hiroprotagonist 大声笑我把它读成python爱:P而不是python小于3:P
      • 蟒蛇之爱! (并且:pathlib 内置在 python >3 中,显然向后移植到 python 2.* [如 kharandziuk 所述])。
      猜你喜欢
      • 2013-04-13
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多