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

function run from a program in a different directory can no longer find its file

我使用的是python 3.6.0,在跨几个目录的项目中遇到了问题。目录结构如下:

1
2
/project
/project/frontend

我的前端的所有功能都在本地完成和测试,并位于/project/frontend中,现在我想将其与我的后端连接,后者位于/project中。

所以我改成了/project/frontend,运行display_page.py,其中包含行:

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

..其中,text_algorithms.py位于/project中,从那里运行时运行良好。因此,它开始运行了30秒,然后崩溃了,它抱怨说它找不到位于/project中的pickle文件。当运行text_algorithms.py或从/projecttext_algorithms.py中导入时,没有问题。

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

所以我想我可以通过从下面的目录运行python frontend/display_page.py来"愚弄"它,但这产生了一个不同的错误,即,

1
ModuleNotFoundError: No module named 'text_algorithms'

有人知道怎么修理这个吗?-如何确保它不会根据您从何处调用而更改查找该文件的位置。有没有适当的方法来处理这种情况?

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


您应该在您的项目中使用cx1〔0〕其他模块:

1
from frontend.text_algorithms import process_text

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

例如:

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