【发布时间】:2016-06-02 05:49:12
【问题描述】:
为了设置一些路径来访问我的应用程序的子目录(如locale/),我在settings.py 中使用它:
__process_name = os.path.basename(sys.argv[0])
__abspath = os.path.abspath(sys.argv[0])
__l1 = len(__process_name)
__l2 = len(__abspath)
rootdir = __abspath[:__l2-__l1]
然后,例如访问data/:
datadir = rootdir + "data/"
问题是,当我在运行测试时运行此 settings.py(例如 python3 -m py.test),然后 sys.argv[0] 不再匹配 myapp 并且测试脚本无法访问 data/。
我想知道如何处理这个,例如:
- 有没有办法从我的应用和测试套件中获取相同的 rootdir?
- 或者,我是否应该只为我的应用保留
settings.py,并为测试套件提供正确的(硬编码)根目录? - 或者在配置文件中定义一个
installdir,它将在安装期间设置,然后由我的应用程序(而不是上面的 sn-p)及其测试套件使用? - 我也想过用
'myappname'替换sys.argv[0],但是,由于有不同的目录具有相同的名称,因此不确定它是否正确。 (另外,如果在另一个地方有一个安装版本和一个开发版本怎么办:如何区分它们?)
那么,处理这个问题的最佳方法是什么?
【问题讨论】:
-
您是否尝试过使用
os.path.dirname(os.path.abspath(__file__))? -
@TheCompiler 不,没试过。我将不得不真正破解它来处理目录的级别差异,但这绝对可以优雅地解决这个问题!这很聪明!您可以将其添加为答案。
标签: python python-3.x testing relative-path pytest