如何在 Cygwin 上使用我的 windows Python 环境?

How can I use my windows Python environment on Cygwin?

我的 windows python 环境中有几个包,我想在 Cygwin 中使用它们。我可以设置链接到用于 windows' python 的文件的虚拟环境,还是必须复制文件?

较旧的 Cygwin 是用其标准输入、标准输出、标准错误绑定到 Windows 编写的,即它是一个 Win32 控制台程序。然后可以将 运行 Windows 版本的 Python 作为:

/cygdrive/c/Python27/python.exe

您甚至可以将 /cygdrive/.../Pythonxx 添加到路径变量中。

较新的版本是用自己的终端编写的,当你 运行 像 Python 这样的 Win32 控制台应用程序时,它会冻结。 即使 运行 在 cygwin 中 "cmd" 运行 下运行它也不会工作。

一半的答案是 运行 它始终处于交互模式,然后它会工作一点。例如

/cygdrive/c/Python27/python.exe -i program.py

或仅 shell

/cygdrive/c/Python27/python.exe -i

您可以尝试在 cygwins 选项下尝试,并更改它当前模拟的终端,看看它是否对您有任何好处。

运行 Windows 版本的 Python 在 cygwin 下,如果你有旧版本,就像你仍然在 Windows 但使用 Unix 控制台。 我认为这不是你想做的事情,无论如何, 但提到它以防万一。 我非常想这样做,但是,在较新的 Cygwins 上它不起作用。 然后所有模块仍然存在。而你还在 Cygwin 中。

要从 Cygwins 版本访问 Windows 版本 Python 中的模块,请将 Windows site-packages 添加到 Python 路径变量。 在你的程序之上做:

import sys
sys.path.insert(0, "/cygdrive/c/Python27/lib/site-packages")

然后就可以正常导入了。但是,这并不完全可取。 例如,所有依赖于 windows 路径的模块都可能有很大的问题。 或者那些用 C 编写的不会完全像从 Cygwin 调用的那样。 特别是当 Cygwin 的 Python 版本号和 Windows 的版本号不同时。 我尝试使用 pyaudio,它崩溃了。 他们中的一些人(主要是小孩子)会工作得很好。

但是,重要说明是,根据您插入 Windows site-packages 路径的位置,目录将被搜索。 如果放在0位置,Python会先看。 那么,最好使用:

sys.path.append("/cygdrive/c/Python27/lib/site-packages")

如果某些包被打包到 EGG 或 ZIP 存档中,您必须将其单独添加到路径中。 子目录也是如此。你试着保持竖起大拇指。

如果您不想这样做,您可以:

import os
wd = os.getcwd()
os.chdir("/cygdrive/c/Python27/lib/site-packages")
# Your Windows imports here
os.chdir(wd)

有时您必须同时执行这两项操作。

您甚至可以添加一个检查,以便您的程序在两种环境中都能很好地工作:

if sys.platform=="cygwin": ...

无需检查即可工作,但麻烦 Python 将同一目录两次添加到路径中是愚蠢的。

复制包将使您免于这些额外的代码行,但我上面提到的问题将保持不变。 尽管如此,如果模块很小,就复制它们,如果不是,就照我说的做,但要注意,这并不是应该做的事情。