相关疑难解决方法(0)

在Python中以编程方式确定distutils数据文件的位置

我正在尝试将数据文件包含在我的包中的distutils中,然后使用相对路径引用它们(参见http://docs.python.org/distutils/setupscript.html#distutils-additional-files)

我的目标结构是:

myproject/
  mycode.py
  data/
    file1.dat
Run Code Online (Sandbox Code Playgroud)

代码mycode.py,实际上是包中的脚本.它依赖于访问data/file1.dat,使用相对路径引用它.在setup.py,我有:

setup(
 ...
 scripts = "myproject/mycode.py"
 data_files = [('data', 'myproject/data/file1.dat')]
)
Run Code Online (Sandbox Code Playgroud)

假设用户现在使用:

python setup.py --prefix=/home/user/
Run Code Online (Sandbox Code Playgroud)

然后mycode.py会出现在某些地方/home/user/bin/.但是data/file1.dat现在已经破坏了引用,因为脚本存在于数据的其他地方.

我怎样才能找到mycode.py绝对路径myproject/data/file1.dat,所以我可以根据用户安装包的位置正确引用它?

编辑
当我安装这个prefix=/home/user/,我得到data/file1.dat创造了/home/user/这正是我想要的,唯一缺少的部分是如何检索,只给出一个相对路径,不知道在用户安装的程序包的绝对路径该文件编程.当我尝试使用package_data而不是data_files,它不起作用 - 我只是不在data/file1.dat任何地方创建,即使我删除我的MANIFEST文件.

我已经阅读了目前关于这个看似非常普遍的问题的所有讨论.然而,所有提出的解决方案都没有处理我上面的情况,其中需要访问的代码data_files是脚本,其位置可能会根据--prefix参数而改变setup.py.我能想到的解决这个问题的唯一黑客是添加数据文件scripts=setup(),如:

setup(
  ...
  scripts = ["myproject/mycode.py", "myproject/data/file1.data"]
)
Run Code Online (Sandbox Code Playgroud)

这是一个可怕的黑客,但它是我能想到的唯一方法,以确保 …

python packaging distutils python-module setuptools

12
推荐指数
2
解决办法
5999
查看次数

标签 统计

distutils ×1

packaging ×1

python ×1

python-module ×1

setuptools ×1