我的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。
由于
答案 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/)打包它。这样,您的应用程序始终运行:)