我正在编写一个包含需要在./data/子目录中打开数据文件的模块的python包.现在我有了硬编码到我的类和函数中的文件的路径.我想编写更强大的代码,可以访问子目录,无论它在用户系统上的安装位置如何.
我尝试了各种各样的方法,但到目前为止我没有运气.似乎大多数"当前目录"命令都返回系统的python解释器的目录,而不是模块的目录.
这似乎应该是一个微不足道的常见问题.但我似乎无法弄明白.部分问题是我的数据文件不是.py文件,所以我不能使用导入功能等.
有什么建议?
现在我的包目录看起来像:
/
__init__.py
module1.py
module2.py
data/
data.txt
Run Code Online (Sandbox Code Playgroud)
我试图访问data.txt距离module*.py
谢谢!
这是我删除的非代码内容的精简版setup.py脚本:
#!/usr/bin/env python
from distutils.core import setup
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in:
include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png
Run Code Online (Sandbox Code Playgroud)
当我运行"python setup.py install sdist"时,我得到一个很好的.tar.gz,带有"whyteboard-0.41"根文件夹,里面有我的locale/images /和whyteboard-help/folders.这也有我的whyteboard.py脚本,它从whyteboard源包中启动我的程序.
所以:
whyteboard/
??? locale/
??? images
??? whyteboard-help/
??? whyteboard/
? ??? __init__.py
? ??? other packages etc
??? whyteboard.py
??? README
??? setup.py
??? CHANGELOG
Run Code Online (Sandbox Code Playgroud)
这反映了我的程序的来源,一切应该是怎样的,并且是正确的.
但是,当我运行"python setup.py install"时,我的数据文件都没有写入 …
对于使用"setup.py"构建安装包的开发人员而言,这应该是一个非常常见的问题,应该先问过它,但我无法在任何地方找到合适的答案.
在setup.py中
from distutils.core import setup
setup(
....,
....,
data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
....,
....,
)
Run Code Online (Sandbox Code Playgroud)
sudo python setup.py安装的结果
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/MyApp_trainer to 755
changing mode of /usr/local/bin/MyApp_reference_updater to 755
changing mode of /usr/local/bin/MyApp_predictor to 755
changing mode of /usr/local/bin/reference_updater to 755
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Run Code Online (Sandbox Code Playgroud)
从使用上述结果的观察,"/ usr/local"是"data_files"根目录.除了硬编码,是否有任何Python函数可以给我这个"data_files"根目录?