python - 如何在 Cygwin 上使用 Windows Python 环境?

标签 python cygwin

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

最佳答案

较旧的 Cygwin 是用绑定(bind)到 Windows 的 stdin、stdout、stderr 编写的,即它是一个 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 选项,并更改它当前模拟的终端,看看它是否对您有任何好处。

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

要从 Cygwins 版本访问 Windows 版本的 Python 中的模块,请将 Windows 站点包添加到 Python 路径变量。 在您的程序之上执行以下操作:

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

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

但是,重要提示是,根据您插入 Windows 站点包路径的位置,将搜索目录。 如果你把它放在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 是愚蠢的。

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

关于python - 如何在 Cygwin 上使用 Windows Python 环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363052/

相关文章:

python - 在 Google App Engine 中使用自定义属性

python - SymPy 中表达式的抽象表示

python - 绘制用 sklearn 制作的回归量的 3d 图

python - 对 Tensorflow 中保存/恢复经过训练的权重和偏差感到困惑

cygwin 64 库 : undefined reference, 重定位被截断以适应:针对 undefined symbol 的 R_X86_64_PC32

cygwin - 如何使cygwin自动完成窗口路径?

python - 判断python中的类是否为元类

php - Cron 作业和 EasyPHP

c++ - 如何在 Cygwin 和 MinGW 中告诉 C++ 库路径

windows - cygwin rsync 所有日志位置