包中的相对文件路径不工作

2024-05-26 07:44:52 发布

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

我的程序包目录有点问题。结构如下:

  • 包含模块的包文件夹
    • 数据库

在package文件夹中,我有很多.py文件,其中包含我在任何地方使用的函数(在另一个驱动器上也是如此)。有些函数如“guess\u countries”使用位于子文件夹中的数据库。我这样做是因为我想将代码导出到github(privaterepo)。你知道吗

问题是:

我的模块Geo\u guesser需要查找此路径(因此是一个子文件夹):“Databases/Geo/Countries/Countries(ZIP+Dump).sqlite3”

但是,从另一个文件夹导入时,会附加当前目录,并将其变为“Z:/Other\u folder/Databases/Geo/Countries/Countries(ZIP+Dump).sqlite3”,而不是数据库所在的“A:/My\u package/Databases/Geo/Countries/Countries(ZIP+Dump).sqlite3”。你知道吗

我不想使用绝对路径,因为所有的东西都包含在包文件夹中,将来我想让它可以pip安装或者与其他人共享,所以绝对路径显然不一样。你知道吗

其他信息:

在我尝试使用的模块Geo\u guesser中:os.path.realpath文件、\文件\和系统argv没有成功(我在发布这篇文章之前查阅了许多主题)。你知道吗

我使用condadevelop可以从任何地方导入我的包的模块

工具:

Anaconda、Python3.6和Jupyter

提前感谢您的帮助:)!你知道吗


Tags: 模块文件函数目录文件夹程序包数据库package
1条回答
网友
1楼 · 发布于 2024-05-26 07:44:52

不管怎样,我终于找到了一个适合我的代码对不起:(:

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

相关问题 更多 >