【问题标题】:Permanently set Python path for Anaconda within Cygwin在 Cygwin 中为 Anaconda 永久设置 Python 路径
【发布时间】:2014-08-06 23:16:24
【问题描述】:

我正在尝试在我的 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 中输入了以下文本,以尝试永久设置路径:

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

打开关闭cygwin后,返回:

$ which python
/usr/bin/python

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

【问题讨论】:

    标签: python windows cygwin anaconda


    【解决方案1】:

    为了在 Cygwin 中使用交互式 Python shell,我使用了 -i 选项。

    为了从 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
    >>>>
    

    这些库也运行良好。例如,现在可以导入 pandas 库(已通过 Anaconda 安装)。

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

    现在为了使这个永久保存,我在我的 bashrc 文件中添加了路径:

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

    我希望这会有所帮助。

    【讨论】:

    • 使用单引号防止变量扩展:echo 'export PATH=/cygdrive/c/anaconda:$PATH' >> .bashrc
    • 编辑了我的答案。谢谢!
    • 谢谢。仍然有我的 .bashrc 文件在启动时没有自动运行的问题,所以我在 ~/.bash_profile 中添加了“.~/.bashrc”(不带引号),现在它就像一个魅力 (stackoverflow.com/questions/9815927/…)
    • -i 选项的解释:-i When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when sys.stdin does not appear to be a terminal. The PYTHONSTARTUP file is not read. This can be useful to inspect global variables or a stack trace when a script raises an exception. See also PYTHONINSPECT.docs.python.org/2/using/cmdline.html
    【解决方案2】:

    我在使用 Cygwin/Windows 7 系统设置 anaconda 时也遇到了问题。有效的方法如下:

    1. 编辑了 ~/.bashrc。在文件底部添加以下内容。

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

    2. 这通过在 Cygwin 的控制台中输入 which python 将 Cygwin 的 python 映射到 anaconda 发行版作为证明。但是,在启动 python 时,它会挂断,迫使我 ^C 退出命令。我发现python -i 将毫无问题地启动交互式 python 解释器。

    【讨论】:

      【解决方案3】:

      路径

      关于您的路径问题,请参阅Installing anaconda to use with windows 了解如何解决该问题。或者,您可以只运行 /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 库之前找到这些库。试试

      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,cygwin 不再安装开始菜单快捷方式,但是如果您查看例如C:\cygwin64 应该有一个文件 Cygwin.bat 来获取 old-skool(没有 unicode!?)控制台。您可以为此创建一个快捷方式。
      【解决方案4】:

      conda 对 cygwin 的解释还有一个问题。当您为环境获取激活脚本时,它会预先添加例如

      /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 环境,它们应该可以工作。

      【讨论】:

      • pip 在使用 conda 环境时也搞砸了;如果您需要在 conda 之外安装软件包,请考虑这一点
      【解决方案5】:

      关于永久设置路径,edit the .profile in your home directory(它是一个隐藏文件)。

      .profile(其他名称也有效,参见 bash 手册页)包含 bash 命令。它在 bash 作为登录 shell 启动时执行。

      在这个文件的底部,输入你的设置路径命令:

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

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

      【讨论】:

      • 编辑了原帖。仍然没有运气永久设置路径。包含 python 初始化的详细返回。
      • 请将您放入.profile的内容复制到.bashrc。此外,“常规”python 是否启动 (/usr/bin/python)?
      • 更新了原帖。 “常规” python 工作正常。我已经将路径定义添加到 .bashrc,但没有运气
      • 您也可以尝试仅使用 Python 创建一个全新的 conda 环境。 conda create -n test python,然后试试/cygdrive/c/anaconda/envs/test/python
      • 我在 Cygwin 中运行 Anaconda (i)python 时也遇到了问题。运行“python -v”时,我得到相同的(截断,然后挂起)行为。你设法解决了这个问题吗?就我而言,我似乎对 PATH 没有问题。每次我打开 cygwin 终端时,它都会使用 Anaconda 正确地显示“which ipython”。
      【解决方案6】:

      我有点晚了,但我遇到了和你一样的问题@thomasshouler。尝试将下面的导出行添加到 .bash_profile 和 .profile 文件以及您的 .bashrc 文件(如上所述)的末尾。确保为每个文件“source .bash_profile”等。

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

      【讨论】:

        【解决方案7】:

        Cygwin 路径如上所述更新后,您还可以在 .bashrc 文件中添加别名:

        alias python='python -i'
        

        这将在 Cygwin bash 提示符下以交互模式启动 Anaconda python 解释器

        【讨论】:

          【解决方案8】:

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

          vim /home/[Username]/.bash_profile
          

          追加到最后一行:

          PATH=$PATH:/cygdrive/c/Users/[Username]/Anaconda3/Scripts/
          

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

          【讨论】:

            猜你喜欢
            • 2010-12-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-30
            • 2018-04-30
            • 2013-03-22
            • 2020-07-28
            • 2014-02-08
            相关资源
            最近更新 更多