我们可以欺骗Python for Cygwin作为win32平台吗? (安装PyBluez)

时间:2012-03-22 08:28:42

标签: python windows cygwin

我想在Windows上使用与Cygwin一起打包的Python。我需要安装PyBluez,一个蓝牙Python绑定。我用easy_install安装它,没问题。我知道它与Windows版本的Python一起工作得很好,因为我安装了PyBluez的.exe并进行了一些测试。

但是我不想使用Windows版本的Python,而是使用Cygwin的版本。但实际上,使用easy_install或直接从tarball安装不能很好地工作(没有错误消息,但它没有完全安装)。原因似乎很简单:在几个文件中,有一些条件语句:

if sys.platform == 'win32':
...
elif sys.platform == 'linux2':
...
elif sys.platform == 'darwin':
...

不幸的是,当我为Cygwin启动Python时,平台是:

$ python

>>> import sys
>>> sys.platform
'cygwin'

有趣的是,当我们从Cygwin启动Python for Windows时,我们拥有哪个平台:

$ /cygdrive/d/Programs/Python26/python -i

>>> import sys
>>> sys.platform
'win32'

我们可以想法修改PyBluez库中的一些Python文件,这样他们就可以同时考虑'win32'和'cygwin':

if sys.platform == 'win32' or sys.platform == 'cygwin':
...

不幸的是,1)它意味着修改一些文件,2)这还不够:在PyBluez的情况下,当我导入库时,我们在__init__.py文件中:

if sys.platform == "win32":
    _dbg("trying widcomm")
    have_widcomm = False
    dll = "wbtapi.dll"
    sysroot = os.getenv ("SystemRoot")
    ...

os.getenv(“SystemRoot”)在启动Python for Windows时已正确定义,但未使用Python for Cygwin定义。

所以,我的问题是:有没有一种简单的方法来欺骗Python,让Cygwin认为它是从win32平台启动的,具有所有正确的所需环境,而无需手动修改库设置文件?

也许根本不可能? (两个版本都在Windows上,但编译方式不同)。

问题不仅限于安装PyBluez,也适用于其他类型的库。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并通过添加到应用程序中的第一个python文件成功欺骗了python以实现此目的,例如 init .py或类似

import sys
sys.platform='linux'

不确定是否适合您,但可以尝试