我想在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,也适用于其他类型的库。
答案 0 :(得分:0)
我遇到了类似的问题,并通过添加到应用程序中的第一个python文件成功欺骗了python以实现此目的,例如 init .py或类似
import sys
sys.platform='linux'
不确定是否适合您,但可以尝试