我的Windows python环境中有几个包,我想在Cygwin中使用它们。我可以设置链接到用于windows的python的文件的虚拟环境,还是我必须复制文件?
答案 0 :(得分:1)
较旧的Cygwin是用stdin绑定到stdin,stdout,stderr编写的,即它是一个Win32控制台程序。然后可以运行Windows版本的Python:
/cygdrive/c/Python27/python.exe
您甚至可以将/cygdrive /.../Pythonxx添加到路径变量中。
较新的版本是通过实现自己的终端编写的,当您运行像Python这样的Win32控制台应用程序时,它会冻结。 即使在“cmd”下运行它也不会在cygwin中运行。
半答案是始终以交互模式运行它,然后它可以运行一点。例如
/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,它崩溃了。 他们中的一些人(主要是小孩子)会很好地工作。
但是,重要说明是,根据您插入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是愚蠢的。
复制软件包将使您免于这些额外的代码行,但我上面提到的问题将保持不变。 从来没有,如果模块很小,复制它们,如果没有,按照我的说法去做,但要注意它并不是应该完成的事情。