dist-packages and sys.path

3

我有一些代码在我的应用程序中,用来查找我的应用程序目录中的一些文件。我正在使用Aptana Studio,并且我看到我的代码运行正常,但是当我创建debian包并在另一台计算机上安装它时,搜索失败,因为sys.path看起来像一个不同的列表。

从Aptana执行sys.path包括可执行目录的路径(/mysvncopy/myapplication),我认为我的代码这样找到了这些文件。

应用程序的安装将这些文件留在/usr/share/pyshared/myapplication,我认为这个目录自动可访问关于/usr/local/lib/python2.6/dist-packagessys.path,但是出了些问题,/usr/local/lib/python2.6/dist-packagessys.path中当然是存在的,但应用程序无法在/usr/share/pyshared/myapplication中找到任何东西。

如何确保应用程序知道在/usr/share/pyshared/myapplication中查找以及相应地在Windows和Mac中?

如果我在我的代码中包含:

<sys.path.append('/usr/share/pyshared/myapplication')

搜索成功,但此代码依赖于特定操作系统。如有需要,我可以粘贴setup.py文件。谢谢。

我又来了,把问题提出来是不对的吗?还是不够清楚? - Antonio
有点不太清楚。你的应用程序要寻找什么类型的文件?它是如何寻找这些文件的?出现了什么样的错误信息?你使用的是哪个版本的Python? - James Khoury
2个回答

0

我不熟悉使用setup.py,所以这可能没有用,但是...

如果你在安装程序的顶部导入sys和os,你可以像这样做:

if sys.getwindowsversion():
    <install to Windows dir>
elif os.system('uname -a'):
    ostest = os.popen('uname -a').split(' ')
    if str('Linux') in ostest:
        <install to Linux dir>

等等。我没有Mac,所以我不知道uname -a是否会在其中返回任何内容,但是如果它确实可以,您可以解析ostest以查找类似于OSX的内容(这很可能在其中某个地方)。并为每个操作系统拥有单独的文件或一组文件。或者更简单的方法是,在安装后,在原始文件中使用名为“OSREPLACE”的某些字符串,然后在找到操作系统并将其分配为变量后,使用类似于此代码的东西:

...    
if os == 'linux':
    NEWSTRING = 'linuxpaths'
elif os == 'mac':
    NEWSTRING = 'macpaths'
elif os == 'windows':
    NEWSTRING = 'windowspaths'

for file in files:
        with open(str(file), 'r') as f:
            data = f.read()
            data = data.replace('OSREPLACE', 'NEWSTRING')
        with open(str(file), 'w') as f:
            f.write(data)       

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接