软件包中的相对文件路径不起作用

时间:2018-10-24 12:04:59

标签: python python-3.x anaconda

我的软件包目录有一个小问题。结构如下:

  • 带有模块的软件包文件夹
    • 数据库

在package文件夹中,我有很多.py文件,这些文件具有我在任何地方(以及其他驱动器)都可以使用的功能。某些功能(例如“ guess_countries”)使用位于子文件夹中的数据库。我这样做是因为我想将我的代码导出到github(私有仓库)。

这是问题所在:

我的模块Geo_guesser需要查找此路径(因此是子文件夹):“数据库/地理位置/国家/国家(ZIP + Dump).sqlite3”

但是,当从另一个文件夹导入时,当前目录将被追加,并变为“ Z:/ Other_folder / Databases / Geo / Countries / Countries(ZIP + Dump).sqlite3”,而不是“ A:/ My_package / Databases / Geo /数据库所在的国家/地区(ZIP + Dump).sqlite3”。

我不想使用绝对路径,因为所有内容都包含在package文件夹中,将来我想使其可点子安装或与他人共享,因此绝对路径不会是显然一样。

其他信息:

在模块Geo_guesser中,我尝试使用:os.path.realpath,__file__和sys.argv,但没有成功(在发布此内容之前,我查询了许多主题)。

我使用了conda开发工具,可以从任何地方导入软件包的模块

工具:

Anaconda,Python 3.6和Jupyter

提前感谢您的帮助:)!

1 个答案:

答案 0 :(得分:0)

没关系,我终于找到了一个对我有用的代码抱歉:(:

import os, sys, inspect

# realpath() will make your script run, even if you symlink it :)
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
if cmd_folder not in sys.path:
    sys.path.insert(0, cmd_folder)

来源:Import a module from a relative path