从不同目录中的程序运行的函数无法再找到其文件

时间:2017-06-27 15:57:09

标签: python python-3.x

我正在使用Python 3.6.0,并且在跨多个目录的项目中遇到问题。目录结构如下所示:

/project
/project/frontend

我的前端的所有功能都在本地完成并进行了测试,并且生活在/project/frontend中,现在我想将它与我的后端连接,后端位于/project

所以我改为/project/frontend并运行display_page.py,其中包含以下行:

sys.path.append('../')
from text_algorithms import process_text

.. text_algorithms.py位于/project,从那里开始运行正常。所以它开始运行了30秒然后崩溃,抱怨它无法找到位于/project的pickle文件从text_algorithms.py运行/project时从来没有问题} text_algorithms.py包含以下行:

with open('english_vocab.pickle', 'rb') as f:
    v = pickle.load(f)  

所以我认为我可以通过从下面的目录运行python frontend/display_page.py来“愚弄”它,但这会产生不同的错误,即

ModuleNotFoundError: No module named 'text_algorithms'

有谁知道如何解决这个问题? - 如何确保它不会在找到该文件的位置发生变化,具体取决于您调用它的位置。有没有正确的方法来处理这种情况?

它应该在任何地方找到它的文件。

1 个答案:

答案 0 :(得分:1)

您应该import项目的其他模块:

from frontend.text_algorithms import process_text

如果在text_algorithms中您要访问相对于此模块的文件,则应使用包含特定模块的文件路径的__file__值。使用os.path,您可以获取目录并将其与数据文件路径连接。

例如:

file_path = os.path.join(
    os.path.split(__file__)[0],
    'some.file'
)