pip 包中的相对路径

Relative paths within a pip package

我正在编写我的第一个 pip 包,但我在处理相对路径时遇到了问题。包结构如下:

.
├── packname
│   ├── __init__.py
│   ├── packfile1.py
│   ├── packfile2.py
│   └── packfile3.py
│
├── datatoload
│   ├── toload1.pkl
│   ├── toload2.pkl
│   ├── toload3.pkl
│   └── toload4.pkl
│
└── requirements.txt

packname目录下的python个文件需要从datatoload目录下的文件中加载数据。我有一些关于管理包文件和数据的问题。

是否可以有一个单独的文件夹来加载数据?

既然我希望人们使用我的包,我是否应该为我的包添加一些属性(我阅读了一些关于 __file____path__ 的内容)?

另外,您对此还有什么建议吗?

谢谢:)

更新 评论里有用户告诉我文件夹需要在package文件夹里面,如下:

.
├── packname
│   ├── __init__.py
│   ├── packfile1.py
│   ├── packfile2.py
│   │── packfile3.py
│   │
│   └─ datatoload
│      ├── toload1.pkl
│      ├── toload2.pkl
│      ├── toload3.pkl
│      └── toload4.pkl
│
└── requirements.txt

我想问的最重要的问题是:如何设置要在包内使用的相对路径?例如,如果我想从 packfile3.py 中的函数加载保存在 toload2.pkl 中的数据,我可以简单地做

load('./datatoload/toload2.pkl')

当有人下载​​我的包(连同 datatoload 文件夹)时,这会起作用吗?

Is it ok to have a separate folder for the data to load?

不行,必须在包里,以免污染安装目录。

…__file__ and __path__…

不需要,Python adds these variables 自动导入。

load('./datatoload/toload2.pkl') Would this work when someone downloads my package…?

否,因为 ./ 表示当前目录和用户的当前目录可以是任何内容。您需要使用 os.path.dirname(__file__) 来计算您的包目录。有关示例,请参阅