繁体   English   中英

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

[英]How do I specify the root module directory in python?

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

这是我的代码的目录结构:

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

我最初是从code目录运行analysiscode.py的,所以我通过指定路径来还原数据文件,如下所示:

import pandas as pd
df = pd.read_excel('../data/datafile.xlsx')

但是,现在,当我尝试对模块根目录(即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的完整路径?

导入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进入模块的根目录:

In [3]: my_project_dir = '/'.join(str(my_project.__file__).split('/')[:-1])
In [4]: print(my_project_dir)
Out[4]: '/Users/me/projects/my_project/'

将其应用于上面的代码示例,无论当前的工作目录是什么,都可以恢复数据:

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')

我测试过这一点,我现在可以成功运行analysiscode.py从内部code目录,以及从内my_project目录,并运行nosetestsmy_project目录工作为好。

只要您位于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM