在Cygwin中永久设置Anaconda的Python路径

28

我正在尝试在Windows 7电脑上安装Anaconda。我经常使用cygwin来进行命令行工作,希望能从那里管理Anaconda。我已经通过图形安装程序顺利完成了安装,并选中了必要的复选框以将默认路径重置为此Python安装程序的路径。我继续检查Python的位置,最初看到的是这样的...

$ which python
/usr/bin/python

从这里开始Python工作得很好...

$ python
Python 2.7.5 (default, Oct  2 2013, 22:34:09)
[GCC 4.8.1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.

但我正试图从Anaconda工作,因此我只需要重新定义我的路径...

$ export PATH=/cygdrive/c/anaconda:$PATH
$ which python
/cygdrive/c/anaconda/python

现在我应该准备就绪了,但是当我尝试进入python时,它却无法运行。

$ python
任何想法为什么会发生这种情况?请参见下面的详细返回...
$ python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\anaconda\lib\site.pyc matches C:\anaconda\lib\site.py
import site # precompiled from C:\anaconda\lib\site.pyc
# C:\anaconda\lib\os.pyc matches C:\anaconda\lib\os.py
import os # precompiled from C:\anaconda\lib\os.pyc
import errno # builtin
import nt # builtin
# C:\anaconda\lib\ntpath.pyc matches C:\anaconda\lib\ntpath.py
import ntpath # precompiled from C:\anaconda\lib\ntpath.pyc
# C:\anaconda\lib\stat.pyc matches C:\anaconda\lib\stat.py
import stat # precompiled from C:\anaconda\lib\stat.pyc
# C:\anaconda\lib\genericpath.pyc matches C:\anaconda\lib\genericpath.py
import genericpath # precompiled from C:\anaconda\lib\genericpath.pyc
# C:\anaconda\lib\warnings.pyc matches C:\anaconda\lib\warnings.py
import warnings # precompiled from C:\anaconda\lib\warnings.pyc
# C:\anaconda\lib\linecache.pyc matches C:\anaconda\lib\linecache.py
import linecache # precompiled from C:\anaconda\lib\linecache.pyc
# C:\anaconda\lib\types.pyc matches C:\anaconda\lib\types.py
import types # precompiled from C:\anaconda\lib\types.pyc
# C:\anaconda\lib\UserDict.pyc matches C:\anaconda\lib\UserDict.py
import UserDict # precompiled from C:\anaconda\lib\UserDict.pyc
# C:\anaconda\lib\_abcoll.pyc matches C:\anaconda\lib\_abcoll.py
import _abcoll # precompiled from C:\anaconda\lib\_abcoll.pyc
# C:\anaconda\lib\abc.pyc matches C:\anaconda\lib\abc.py
import abc # precompiled from C:\anaconda\lib\abc.pyc
# C:\anaconda\lib\_weakrefset.pyc matches C:\anaconda\lib\_weakrefset.py
import _weakrefset # precompiled from C:\anaconda\lib\_weakrefset.pyc
import _weakref # builtin
# C:\anaconda\lib\copy_reg.pyc matches C:\anaconda\lib\copy_reg.py
import copy_reg # precompiled from C:\anaconda\lib\copy_reg.pyc
# C:\anaconda\lib\traceback.pyc matches C:\anaconda\lib\traceback.py
import traceback # precompiled from C:\anaconda\lib\traceback.pyc
# C:\anaconda\lib\sysconfig.pyc matches C:\anaconda\lib\sysconfig.py
import sysconfig # precompiled from C:\anaconda\lib\sysconfig.pyc
# C:\anaconda\lib\re.pyc matches C:\anaconda\lib\re.py
import re # precompiled from C:\anaconda\lib\re.pyc
# C:\anaconda\lib\sre_compile.pyc matches C:\anaconda\lib\sre_compile.py
import sre_compile # precompiled from C:\anaconda\lib\sre_compile.pyc
import _sre # builtin
# C:\anaconda\lib\sre_parse.pyc matches C:\anaconda\lib\sre_parse.py
import sre_parse # precompiled from C:\anaconda\lib\sre_parse.pyc
# C:\anaconda\lib\sre_constants.pyc matches C:\anaconda\lib\sre_constants.py
import sre_constants # precompiled from C:\anaconda\lib\sre_constants.pyc
# C:\anaconda\lib\locale.pyc matches C:\anaconda\lib\locale.py
import locale # precompiled from C:\anaconda\lib\locale.pyc
import encodings # directory C:\anaconda\lib\encodings
# C:\anaconda\lib\encodings\__init__.pyc matches C:\anaconda\lib\encodings\__init__.py
import encodings # precompiled from C:\anaconda\lib\encodings\__init__.pyc
# C:\anaconda\lib\codecs.pyc matches C:\anaconda\lib\codecs.py
import codecs # precompiled from C:\anaconda\lib\codecs.pyc
import _codecs # builtin
# C:\anaconda\lib\encodings\aliases.pyc matches C:\anaconda\lib\encodings\aliases.py
import encodings.aliases # precompiled from C:\anaconda\lib\encodings\aliases.pyc
import operator # builtin
# C:\anaconda\lib\functools.pyc matches C:\anaconda\lib\functools.py
import functools # precompiled from C:\anaconda\lib\functools.pyc
import _functools # builtin
import _locale # builtin
# C:\anaconda\lib\encodings\cp1252.pyc matches C:\anaconda\lib\encodings\cp1252.py
import encodings.cp1252 # precompiled from C:\anaconda\lib\encodings\cp1252.pyc
# zipimport: found 13 names in C:\anaconda\lib\site-packages\runipy-0.1.0-py2.7.egg
# zipimport: found 144 names in C:\anaconda\lib\site-packages\setuptools-3.6-py2.7.egg
Python 2.7.7 |Anaconda 2.0.1 (64-bit)| (default, Jun 11 2014, 10:40:02) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and htt

我遇到的另一个(可能相关的)问题是每次关闭/打开cygwin都需要重置路径。我已经在.bashrc和.profile文件中输入了以下文本,试图永久设置路径:

可能相关的另一个问题是我每次关闭/打开cygwin都需要重新设置路径。我已经在.bashrc和.profile文件中加入了以下文本以尝试永久设置路径:

# Set path to python from anaconda install
export PATH=/cygdrive/c/anaconda:$PATH

打开和关闭cygwin后,我回到:

$ which python
/usr/bin/python

这与设置某些系统环境变量有关吗?

8个回答

29

我使用 -i 选项在Cygwin中与交互式Python shell一起工作。

要从Anaconda安装中获取它,我使用了上面建议的步骤:

$ export PATH=/cygdrive/c/anaconda:$PATH
$ which python
/cygdrive/c/anaconda/python

然后我在Cygwin中使用-i选项启动Python:

$ python -i
Python 2.7.8 |Anaconda 2.1.0 (64-bit)| (default, Jul  2 2014, 15:12:11) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>>>

图书馆也正常工作。例如,现在可以导入通过Anaconda安装的pandas库。

>>>> import pandas
>>>> pandas.DataFrame
<class 'pandas.core.frame.DataFrame'>

现在,为了使此更改永久化,我在我的bashrc文件中添加了路径:

现在,为了让这个更改变得持久化,我在我的bashrc文件中添加了这个路径:

$ echo 'export PATH=/cygdrive/c/anaconda:$PATH' >> .bashrc
$ source .bashrc
$ which python
/cygdrive/c/anaconda/python

我希望这有所帮助。


谢谢。我仍然遇到了我的.bashrc文件在启动时无法自动运行的问题,所以我在~/.bash_profile中添加了". ~/.bashrc"(不带引号),现在它像魔术一样工作了。(https://dev59.com/tmkw5IYBdhLWcg3wi7Jz) - Ben Ogorek
“-i”选项的解释:当一个脚本作为第一个参数传递或使用“-c”选项时,在执行脚本或命令后进入交互模式,即使sys.stdin似乎不是终端。PYTHONSTARTUP文件不会被读取。当脚本引发异常时,这对于检查全局变量或堆栈跟踪非常有用。另请参阅PYTHONINSPECT。https://docs.python.org/2/using/cmdline.html - Danijel

5
我也遇到了在我的Cygwin / Windows 7系统上安装anaconda的问题。下面是解决方案:
1. 编辑 ~/.bashrc 文件,添加以下内容到文件底部:
``` export PATH=/cygdrive/c/Anaconda:$PATH ```
2. 这会将Cygwin的Python映射到anaconda发行版,可通过在Cygwin控制台中输入 `which python` 查证。然而,当启动Python时,它会卡住,强制我退出命令。我发现使用 `python -i` 会无问题地启动交互式Python解释器。

谢谢 @SciGuyMcQ,我已经通过更改.bashrc文件中的路径解决了上述问题,但是export PATH=/cygdrive/c/Users/User/anaconda3:$PATH,可能路径不正确,因为Python版本3开始使用anaconda3而不是conda。 - undefined

3

路径

关于您的路径问题,请参考在Windows上安装Anaconda来解决。 或者,您可以直接运行/cygdrive/c/Anaconda/python.exe启动Anaconda /windows python,并将标准的python指向cygwin版本。

请注意,互联网上给出的建议中,很少包括对PYTHONPATH所必需的更改:如果您使用Anaconda /windows python,则还需要Anaconda python库。如果混淆了这些东西,则二进制模块如numpy肯定会崩溃或表现不当。检查这一点的最简单方法是在cygwin中安装一个您不需要在Conda中的模块,然后测试是否可以从Anaconda python中导入该模块。如果可以,则说明您的路径有误。

Anaconda python将自动将c:\Anconda添加到您的PYTHONPATH环境变量中,但如果您将其设置为服务CYGWIN python库,则在找到Anaconda libs之前将找到它们。请尝试:

import sys
sys.path

终端

然而,这也是一个终端问题:Anaconda(Windows)Python需要一个Windows shell,而现代的Cygwin shell类似于xterm,因此非常不同。通过运行python --help来诊断这个问题,如果它可以工作但纯粹的python卡住了,那么交互式提示符就是问题所在。这意味着您可以运行Python程序,但无法与它们交互。

解决这个问题的方法是使用Cygwin bash shell而不是Cygwin terminal(两者都在开始菜单的Cygwin组下)。它们看起来非常相似,但是bash shell中的字体不太漂亮,而且您不能将窗口扩展到超过80个字符(就像所有其他CMD窗口一样,从未理解这个“功能”)。这是在CMD窗口内运行的Cygwin bash,您的Anaconda Python将是交互式的。 Cygwin terminal提供了在putty衍生品中运行的bash shell,它模仿xterm,无法被Anaconda Python使用。


我的Cygwin安装中没有Cygwin Bash Shell,要获取等效的内容,请从Windows开始菜单中运行cmd.exe,然后从那里运行Bash。这确实解决了Anaconda交互问题。 - poleguy
非常有用的帖子,谢谢!@poleguy,cygwin不再安装开始菜单快捷方式,但是如果您查看例如C:\ cygwin64,应该会有一个文件Cygwin.bat以获取旧式(无Unicode!?)控制台。您可以创建一个指向它的快捷方式。 - Luke Usherwood

3
conda对cygwin的解释还存在另一个问题。当你激活环境的激活脚本时,它会在PATH前面加上如下路径:
/C/Users/Thomas.Harris/AppData/Local/Continuum/Anaconda3/envs/blah /C/Users/Thomas.Harris/AppData/Local/Continuum/Anaconda3/envs/blah/Library/mingw-w64/bin /C/Users/Thomas.Harris/AppData/Local/Continuum/Anaconda3/envs/blah/Library/usr/bin /C/Users/Thomas.Harris/AppData/Local/Continuum/Anaconda3/envs/blah/Library/bin /C/Users/Thomas.Harris/AppData/Local/Continuum/Anaconda3/envs/blah/Scripts
但是,在cygwin中这些并不是正确的目录。
我通过以下方式解决了这个问题: ln -s /cygdrive/c /C
然后,如果你使用特定版本的python创建conda环境,它们应该能够正常工作。

如果需要在conda之外安装软件包,请注意使用conda环境时pip也会出现问题。 - jarandaf

1

我来晚了,但我和@thomasshouler一样也遇到了同样的问题。尝试在.bash_profile和.profile文件末尾以及你的.bashrc文件中添加下面的导出行。确保对每个文件都执行“source .bash_profile”等操作。

export PATH=/cygdrive/c/anaconda:$PATH

1
发现对于Anaconda 4,需要执行以下操作:

vim /home/[Username]/.bash_profile

在最后一行追加:
PATH=$PATH:/cygdrive/c/Users/[Username]/Anaconda3/Scripts/

对我来说,这个解决方案很有效,因为通常的anaconda3/bin找不到。


1
一旦按照上述方法更新了Cygwin路径,您还可以在.bashrc文件中添加别名:
alias python='python -i'

这将在Cygwin bash提示符下启动Anaconda Python解释器的交互模式。

1
关于永久设置您的路径,编辑您的主目录中的.profile文件(它是一个隐藏文件)。

.profile(也可以使用其他名称,请参见bash手册)包含bash命令。当bash作为登录shell启动时,它会被执行。

在该文件底部添加您的设置路径命令:

export PATH=/cygdrive/c/anaconda:$PATH

关于为什么Python挂起,请提供更多信息——例如,python -v的输出是什么?

编辑了原始帖子,但仍然没有永久设置路径的运气。包括 Python 初始化的详细返回。 - thomastodon
请将您在.profile中的内容复制到.bashrc中。另外,"常规" Python 启动 (/usr/bin/python) 是否正常? - Martin Konecny
更新原帖。 "常规" Python 可以正常工作。我已经将路径定义添加到 .bashrc 中,但没有成功。 - thomastodon
您也可以尝试使用仅包含Python的新conda环境。conda create -n test python,然后尝试/cygdrive/c/anaconda/envs/test/python - asmeurer
我也遇到了在Cygwin中运行Anaconda (i)python的问题。当我运行“python -v”时,我得到了相同的(截断然后挂起)行为。你解决了这个问题吗?在我的情况下,我似乎没有PATH的问题。每次我打开一个Cygwin终端时,它都使用Anaconda正确地显示“which ipython”。 - Joseph Hastings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接