【问题标题】:Properties file (ini file) isn't included in python package属性文件(ini 文件)不包含在 python 包中
【发布时间】:2012-01-25 23:10:06
【问题描述】:

如何在要在 Linux 和 Windows 上使用的 python 包中包含 properties/ini 文件?

我尝试通过将 ini 文件放在 Project 文件夹下来创建一个 python 包,以便我可以使用以下代码访问它:

File = open("props.ini", 'r')

然后我将我的包部署到一个 .tar.gz 文件中:

$ python setup.py sdist

然后我安装包(使用 Linux 机器):

$ sudo pip install package_name.tar.gz

我的 .py 文件在这里:

/usr/local/lib/python2.7/dist-packages/package_name/*.py

我的脚本在这里打开程序:

/usr/local/bin/myScript

但我没有得到我的 .ini 文件。

【问题讨论】:

  • 我也尝试过:将此行添加到我的 setup.py 文件中:data_files=[('', ['Project/props.properties'])],(我犹豫要在此指定一个目录行,因为如果有人没有 python 2.7 或使用非 Linux 机器,这将是一个问题)这将我的 .ini 文件放在这里:/usr/local/props.properties 因为我的属性文件不与其余的我的包,我的程序找不到/访问它。

标签: python package pip


【解决方案1】:

一种方法是将配置文件放在源代码下的目录中。

例如,如果您的源代码在src 目录下,您可以在src/config 下添加您的配置文件。之后,对于src 目录中的任何代码,您可以使用以下命令访问配置文件:

config_filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), 
                               'config', <filename>)

为了在代码分发时保持相同的目录结构,setup.py 中的setup 函数需要使用package_data 参数了解这些新文件:

setup(
...
package_data={'src': ['config/*',]},
...
)

【讨论】:

  • 阅读您的评论后,我尝试完全按照您所说的去做(使用您的命名约定)。然后我尝试运行我的程序(在创建包之前)。结果:IOError: [Errno 20] Not a directory: '.../Project/myFile.py/config/props.ini'
  • 当然“myFile.py”、“config”和“props.ini”不是目录(也不应该是目录)。 os.path.join 应该做什么?
  • 这更清楚了,谢谢。现在,当我在创建包之前运行程序时它可以工作了。但是,一旦我创建了包,它就不起作用了。我的 .py 文件仍然会转到 /usr/local/lib/python2.7/dist-packages/package_name/.py... 所以它会在此处查找我的 .ini 文件:/usr/local /lib/python2.7/dist-packages/package_name/config/props.ini ...但我的 .ini 文件转到 /usr/local/props.ini
  • 有效!我又按照你的指示做了一遍,效果很好!谢谢 jcollado!
  • 嗯,所以我刚刚检查了......虽然它在我安装在 Linux 上时可以工作,但当我在 Windows 上安装时它不起作用。在 Windows 中,安装软件包后:没有配置目录或 .ini 文件。另外,如何将答案标记为已接受?我没有任何声望点,所以我不能“投票”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2019-11-03
  • 2014-02-15
相关资源
最近更新 更多