使用setup.py分发后访问数据文件

时间:2014-04-11 00:59:17

标签: python setup.py

我有一个多平台项目,其中我需要发送几个不属于python的第三方可执行文件/数据文件。在源文件中,我将其保存在数据目录下,并使用此行

从主脚本调用可执行文件
trd_prt_exe = os.path.join("tools", "syslinux", "bin", "executable_name")

从源代码进行测试/开发时,它的工作正常。当我使用setup.py分发相同内容时出现问题。使用setup.py安装应用程序后,出现此错误

for path, subdirs, files in os.walk(os.path.join("tools"))
File "/usr/lib/python2.7/os.py", line 276, in walk
    names = listdir(top)
TypeError: coercing to Unicode: need string or buffer, NoneType found

显然,python无法在数据目录下找到我的可执行文件。

我们如何在开发期间和分发后访问这些可执行文件/数据文件。

更新我

我可以包括但只是忘了。这是我完整的项目范围: -

[sundar@arch multibootusb-7.0.0]$ tree 
.
├── data
│   ├── multibootusb.desktop
│   └── multibootusb.png
├── LICENSE.txt
├── multibootusb
├── PKG-INFO
├── README.txt
├── scripts
│   ├── admin.py
│   ├── detect_iso.py
│   ├── __init__.py
│   ├── install_distro.py
│   ├── install_syslinux.py
│   ├── isodump.py
│   ├── multibootusb_ui.py
│   ├── qemu.py
│   ├── uninstall_distro.py
│   ├── update_cfg.py
│   └── var.py
├── setup.py
└── tools
    ├── checking.gif
    ├── mbr.bin
    ├── multibootusb
    │   ├── chain.c32
    │   ├── extlinux.cfg
    │   ├── grub.exe
    │   ├── memdisk
    │   ├── menu.c32
    │   ├── menu.lst
    │   ├── syslinux.cfg
    │   └── vesamenu.c32
    ├── multibootusb.png
    ├── syslinux
    │   └── bin
    │       ├── syslinux3
    │       ├── syslinux4
    │       ├── syslinux5
    │       └── syslinux6
    └── version.txt

以下是setup.py中的内容: -

from distutils.core import setup
import os
mbusb_version = open(os.path.join("tools", "version.txt"), 'r').read().strip()
setup(
    name='multibootusb',
    version=mbusb_version,
    packages=['scripts'],
    scripts = ['multibootusb'],
    platforms = ['Linux'],
    url='http://multibootusb.org/',
    license='General Public License (GPL)',
    author='Sundar',
    author_email='feedback.multibootusb@gmail.com',
    description='Create multi boot Live linux on a USB disk...',
    long_description = 'The multibootusb is an advanced cross-platform application for installing/uninstalling Linux operating systems on to USB flash drives.',
    data_files = [("/usr/share/applications",["data/multibootusb.desktop"]),
                  ('/usr/share/pixmaps',["data/multibootusb.png"]),
                  ('multibootusb/tools',["tools/checking.gif"]),
                  ('multibootusb/tools',["tools/mbr.bin"]),
                  ('multibootusb/tools',["tools/version.txt"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/chain.c32"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/extlinux.cfg"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/grub.exe"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/memdisk"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/menu.c32"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/menu.lst"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/syslinux.cfg"]),
                  ('multibootusb/tools/multibootusb',["tools/multibootusb/vesamenu.c32"]),
                  ('multibootusb/tools/syslinux/bin',["tools/syslinux/bin/syslinux3"]),
                  ('multibootusb/tools/syslinux/bin',["tools/syslinux/bin/syslinux4"]),
                  ('multibootusb/tools/syslinux/bin',["tools/syslinux/bin/syslinux5"]),
                  ('multibootusb/tools/syslinux/bin',["tools/syslinux/bin/syslinux6"])]
                  #('multibootusb/tools',["tools/multibootusb.png"])]


)

我发现的问题是usr/bin/multibootusb中可用的主要可执行脚本“multibootusb”,但其他数据/第三方可执行文件位于/usr/multibootusb/以及主程序multibootusb所需的其他模块/脚本中在/usr/lib/python2.7/site-packages/scripts下。因此,主程序无法找到我的第三方数据/可执行文件。

如何克服这个问题?我在哪里做错了?

0 个答案:

没有答案