如何在python中指定根模块目录?

2024-10-08 18:23:30 发布

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

我有一些代码可以使用pandas在python中恢复一些小的excel文件,并对它们执行一些数据分析。我现在正试图对我的代码进行测试,但我遇到了一些麻烦,在四处搜索时找不到一个合适的答案。在

下面是我代码的目录结构:

my_project/
    __init__.py
    code/
        __init__.py
        analysiscode.py
    tests/
        __init__.py
        testcode.py
    data/
        datafile.xlsx

我最初是从code目录运行analysiscode.py,因此我通过指定如下路径来恢复数据文件:

^{pr2}$

但是,现在当我尝试从模块根目录(即my_project)对代码运行测试时,指定在查找数据目录之前向上一个目录的路径不再有效。在

以下是错误消息的示例:

my_project$ nosetests
IOError: [Errno 2] No such file or directory: '../data/datafile.xlsx'

对于这个特殊的情况,我总是可以指定完整的路径,但是我正在寻找一个更通用的解决方案,以便其他人可以下载此代码,并且仍然有效。在

有没有一种方法可以在python中指定my_project目录?换言之,有没有一种方式可以按照

mydatadir = my_project/data
df = pd.read_excel(mydatadir+'datafile.xlsx')

这样我就可以从my_project/code目录或my_project目录运行分析代码,而不需要知道my_project的完整路径?在


Tags: 代码py路径目录projectpandasdatainit
2条回答

只要您在my_project或它的任何子目录中,就可以进入基本目录(my_project)。在这段代码之后,您可以运行诸如
df = pd.read_excel('data/datafile.xlsx')之类的命令。在

import os
my_dir = "my_project" #Root Directory
while os.getcwd().find(my_dir) >= 0:
    os.getcwd("..") #Go back until you are out of the my_dir
os.chdir(my_dir) #Go back into my_dir

在导入my_project之后,我使用__file__计算出模块根路径:

In [1]: import my_project
In [2]: print(my_project.__file__)
Out[2]: /Users/me/projects/my_project.__init__.py

通过一些字符串操作,去掉.__init__.py以到达模块根目录:

^{pr2}$

将此方法应用于上面的代码示例中,无论当前工作目录是什么,都可以恢复数据,如下所示:

import my_project
import pandas as pd
my_project_dir = '/'.join(str(my_project.__file__).split('/')[:-1])
df = pd.read_excel(my_project_dir+'data/datafile.xlsx')

我已经测试过了,现在我可以从code目录以及{}目录中成功运行analysiscode.py,并且从my_project目录运行{}。在

相关问题 更多 >

    热门问题