Python 3.x 使用sys.path.append时os.path.isfile失败

Python 3.x 使用sys.path.append时os.path.isfile失败,python-3.x,path,Python 3.x,Path,我有以下资料: application/3rdPArtyApp/file.py application/3rdPArtyApp/directory/someFile application/MyApp/file.py 我想从MyApp访问3rdPArtyApp中的文件,因此我在MyApp/file.py中执行以下操作 sys.path.append('../3rdPArtyApp') 这很好,我现在可以通过导入文件和函数来访问它们。 但是,3rdPartyApp中有一个文件试图访问文件夹目录

我有以下资料:

application/3rdPArtyApp/file.py
application/3rdPArtyApp/directory/someFile
application/MyApp/file.py
我想从MyApp访问3rdPArtyApp中的文件,因此我在MyApp/file.py中执行以下操作

sys.path.append('../3rdPArtyApp')
这很好,我现在可以通过导入文件和函数来访问它们。 但是,3rdPartyApp中有一个文件试图访问文件夹目录/someFile中的文件

它使用以下命令来检查它是否是一个无论何时从MyApp调用都会失败的文件,但当从3rdPartyApp单独调用它时不会失败

os.path.isfile(file)
我假设从MyApp调用if时失败,因为它希望它位于MyApp路径下


如何解决此问题?

如果您无法更改库代码,我认为您必须在每次调用之前更改工作目录

因此,我像helper类change_cwd一样实现了这个函数。只需使用change_cwd'../3rdPArtyApp':,包装对外部库的每个函数调用


是的,它失败是因为它是一个相对路径,并且您当前的工作目录与3rdPartyApp期望的不同。如果您有权访问该应用程序,则可以将os.path.isfilefile更改为相对于_文件的路径。否则,除了运行将工作目录更改为3rdPartyApp文件夹(我想这不是您想要的)之外,您没有什么可以做的。另外:不要命名变量文件,它是python关键字。很遗憾,我无法更改3rdPartyApp代码。当我使用3rdPArtyApp中的函数时,是否有办法将工作目录更改为3rdPArtyApp?是的。给我一秒钟,这是你的世界,我很高兴你让我生活在其中;
import os

class change_cwd:
    def __init__(self, path):
        self.path = os.path.abspath(path)
    def __enter__(self):
        self.old_cwd = os.getcwd()
        os.chdir(self.path)
    def __exit__(self, exc_type, exc_value, traceback):
        os.chdir(self.old_cwd)

print(os.getcwd())
with change_cwd('Downloads'):
    print(os.getcwd())
print(os.getcwd())
/home/<user>
/home/<user>/Downloads
/home/<user>