Python中与操作系统无关的路径导入

2024-04-19 04:13:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一些并行的小型Python包,我的存储库组织如下:

|- root_folder
    |- source_code_folder
        |- package1
        |- package2
        |-...
    |- test_folder
        |- package1_test_folder
            |- package1_test.py

其中root_folder是存储库,source_code_folder包含要在test_folder/packageX_test_folder中包含的test.py文件中导入和测试的包

我已经编写了以下几行代码,将来自任何test_folder/package1_test_folder/test.py文件的source_code_folder(不是永久性地)添加到路径中

if __name__ == '__main__':
    def __import_pkgs():
        # automatically add to the path the source_code_folder folder if it is not contained yet
        THIS_PATH = os.getcwd().split('\\')
        for i in range(THIS_PATH.index('root_folder'),len(THIS_PATH)-1): THIS_PATH.pop()
        ROOT_PATH = '\\'.join(THIS_PATH)
        PKG_PATH = ROOT_PATH + '\\source_code_folder\\'
        if sys.path.count(PKG_PATH) == 0: sys.path.append(PKG_PATH)
        return None

    __import_pkgs()

但是,通过这种方式,此__import_pkgs()函数仅适用于基于Windows的环境。 有没有办法让它独立于操作系统?有人有什么建议让它更高效/优雅吗


Tags: 文件pathpytestimportsourceifcode
2条回答

我建议使用“os.path”,如下所示:

import sys
from os import path

if __name__ == '__main__':
    software_code_full_path = path.abspath(path.join(path.dirname(__file__), '../../source_code_folder'))

    if software_code_full_path not in sys.path:
        sys.path.append(software_code_full_path)

使用os.sep获取路径分隔符,而不是显式使用正斜杠或反斜杠

相关问题 更多 >