我的应用程序中有一些代码可以在我的应用程序的目录中查找一些文件。我正在使用 AptanaStudio,我看到我的代码运行正常,但是当我创建 debian 软件包并将其安装在另一台计算机上时,搜索不成功,因为 sys.path 看起来像一个不同的列表。
从 Aptana 执行 sys.path 包括可执行目录 (/mysvncopy/myapplication) 的路径,我相信我的代码以这种方式找到文件。
应用程序的安装将此文件留在 /usr/share/pyshared/myapplication 并且我认为此目录可自动访问 /usr/local/lib/python2.6/dist -packages 在 sys.path 中,但是有问题,/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。
谢谢
最佳答案
我不熟悉使用 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 之类的东西(它很可能在某个地方)。并且每个操作系统都有一个单独的文件或一组文件。或者更简单,在他们安装之后,在您的原始文件中有一些字符串,例如“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)
关于python - dist-packages 和 sys.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9786098/