dist-packages和sys.path

时间:2012-03-20 11:42:24

标签: python sys.path

我的myapplication中有一些代码可以查找myapplications目录中的一些文件。我正在使用AptanaStudio,我看到我的代码运行正常,但是当我创建debian软件包并将其安装在另一台计算机上时,搜索不成功,因为sys.path看起来像一个不同的列表。

从Aptana执行 sys.path 包含可执行目录的路径(/ mysvncopy / myapplication),我相信我的代码会以这种方式查找文件。

应用程序的安装将此文件保留在 / usr / share / pyshared / myapplication 中,我认为此目录可自动访问 /usr/local/lib/python2.6/dist sys.path 中的-packages ,但有些错误, /usr/local/lib/python2.6/dist-packages sys中.path ,当然,但是应用程序在 / usr / share / pyshared / myapplication 中找不到任何内容。

我怎样才能确保应用程序知道在 / usr / share / pyshared / myapplication 内部以及在windows和mac中等效的内容?

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

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

搜索成功,但此代码为S.O.依赖

如果需要,我可以粘贴setup.py。

由于

2 个答案:

答案 0 :(得分: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是否会返回任何一个,但是如果它确实可以解析像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)       

答案 1 :(得分:0)

如果你正在创建一个包含用python编写的应用程序的debian软件包,你应该先用pex(https://github.com/pantsbuild/pex)或cx_Freeze(http://cx-freeze.sourceforge.net/)打包它。这样,您的应用程序始终运行:)