Vin*_*ren 6 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':
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我为Cygwin启动Python时,平台是:
$ python
>>> import sys
>>> sys.platform
'cygwin'
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我们从Cygwin启动Python for Windows时,我们拥有哪个平台:
$ /cygdrive/d/Programs/Python26/python -i
>>> import sys
>>> sys.platform
'win32'
Run Code Online (Sandbox Code Playgroud)
我们可以想到修改PyBluez库中的一些Python文件,这样他们就可以同时考虑'win32'和'cygwin':
if sys.platform == 'win32' or sys.platform == 'cygwin':
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,1)它意味着修改一些文件,2)它是不够的:在PyBluez的情况下,当我导入库时,我们在__init__.py文件中:
if sys.platform == "win32":
_dbg("trying widcomm")
have_widcomm = False
dll = "wbtapi.dll"
sysroot = os.getenv ("SystemRoot")
...
Run Code Online (Sandbox Code Playgroud)
os.getenv("SystemRoot")在启动Python for Windows时正确定义,但没有使用Python for Cygwin定义.
所以,我的问题是:有没有一种简单的方法可以欺骗Python,让Cygwin认为它是从win32平台启动的,具有所有正确的所需环境,而无需手动修改库设置文件?
也许根本不可能?(两个版本都在Windows上,但编译方式不同).
问题不仅限于PyBluez的安装,也适用于其他类型的库.
我遇到了类似的问题,并通过添加到我的应用程序中的第一个 python 文件(例如init .py 或类似文件)成功地欺骗了 python 来做到这一点
import sys
sys.platform='linux'
Run Code Online (Sandbox Code Playgroud)
不确定它是否适合你,但可以尝试一下
归档时间: |
|
查看次数: |
1108 次 |
最近记录: |