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__)
来计算您的包目录。有关示例,请参阅 。
我正在编写我的第一个 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__)
来计算您的包目录。有关示例,请参阅