我有一个多平台项目,其中我需要发送几个不属于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
下。因此,主程序无法找到我的第三方数据/可执行文件。
如何克服这个问题?我在哪里做错了?