蟒蛇提示加载错误:输入行太长



我在Windows 7 64位版本上安装了Anaconda 64 python 2.7。安装后,蟒蛇提示符可以毫无问题地启动。但是每当我重新启动/关闭并重新启动笔记本电脑时,anaconda 提示符都会显示以下错误消息,并且某些 python 包在 jupyter 笔记本中加载时存在问题。

Deactivating environment "C:UsersuserAnaconda2"...
Activating environment "C:UsersuserAnaconda2"...
The input line is too long.
 "PATH_NO_SCRIPTS=C:UsersuserAnaconda2;;C:UsersuserAnaconda2Lib
rarybin;C:Python27;C:Python27Scripts;c:Rtoolsbin;c:Rtoolsgcc-4.6.3bin;
C:ProgramDataOracleJavajavapath;%COSMOSM%;C:Program FilesLenovo Fingerprin
t Reader;C:Program Files (x86)InteliCLS Client;C:Program FilesInteliCLS
Client;C:Program Files (x86)AMD APPbinx86_64;C:Program Files (x86)AMD APP
binx86;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:Program File
s (x86)ATI TechnologiesATI.ACECore-Static;C:Program FilesIntelIntel(R) Man
agement Engine ComponentsDAL;C:Program FilesIntelIntel(R) Management Engine
ComponentsIPT;C:Program Files (x86)IntelIntel(R) Management Engine Component
sDAL;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsIPT;C:
Program FilesIntelWiFibin;C:Program FilesCommon FilesIntelWirelessCommon
;C:Program FilesSonyVAIO Improvement;C:Program Files (x86)SonyVAIO Start
up Setting Tool;c:Program Files (x86)Common FilesRoxio SharedOEMDLLShared;
c:Program Files (x86)Common FilesRoxio SharedOEMDLLShared;c:Program Files
 (x86)Common FilesRoxio SharedOEM12.0DLLShared;c:Program Files (x86)Roxi
o 2010OEMAudioCore;C:Program Files (x86)Common FilesThunder NetworkKanKan
Codecs;C:WindowsSystem32WindowsPowerShellv1.0;C:Program FilesIVI Foundat
ionVISAWin64Bin;C:Program Files (x86)IVI FoundationVISAWinNTBin;C:Pro
gram Files (x86)IVI FoundationVISAWinNTBin;C:Program Files (x86)IVI Founda
tionIVIbin;C:Program FilesIVI FoundationIVIbin;C:PROGRA~2IVIFOU~1VISAW
inNTBin;C:WindowsSystem32WindowsPowerShellv1.0;C:Python27;C:UsersuserAppDataLocalSmartbarApplication;C:Program Files (x86)WinSCP;C:Python
27Scripts;C:Program Filesffmpegbin;C:Program FilesMicrosoft SQL Server110
ToolsBinn;C:Program Files (x86)MiKTeX 2.9miktexbin;C:Program Files (x86
)Windows Kits8.1Windows Performance Toolkit;C:HashiCorpVagrantbin;C:Prog
ram Files (x86)SkypePhone;;C:UsersuserDesktopwin64\lib;C:UsersuserDesktopwin64\3rdpartycudnnbin;C:UsersuserDesktopwin64\3rdpa
rtycudart;C:UsersuserDesktopwin64\3rdpartyvc;C:UsersuserDesk
topwin64\3rdpartyopenblasbin;C:Python27;C:Python27Scripts;c:Rtoolsbin;
c:Rtoolsgcc-4.6.3bin;C:ProgramDataOracleJavajavapath;%COSMOSM%;C:Program
 FilesLenovo Fingerprint Reader;C:Program Files (x86)InteliCLS Client;C:P
rogram FilesInteliCLS Client;C:Program Files (x86)AMD APPbinx86_64;C:Pro
gram Files (x86)AMD APPbinx86;C:Windowssystem32;C:Windows;C:WindowsSyste
m32Wbem;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;C:Program
FilesIntelIntel(R) Management Engine ComponentsDAL;C:Program FilesIntelInt
el(R) Management Engine ComponentsIPT;C:Program Files (x86)IntelIntel(R) Man
agement Engine ComponentsDAL;C:Program Files (x86)IntelIntel(R) Management E
ngine ComponentsIPT;C:Program FilesIntelWiFibin;C:Program FilesCommon Fi
lesIntelWirelessCommon;C:Program FilesSonyVAIO Improvement;C:Program Fil
es (x86)SonyVAIO Startup Setting Tool" was unexpected at this time.

我试图在这里和这里遵循解决方案,但没有成功。

我查看了Anaconda下的脚本文件夹,发现错误消息可能来自激活.bat文件。但我不知道下一步该怎么做。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM Check for CONDA_ENVS_PATH environment variable
REM It it doesn't exist, look inside the Anaconda install tree
IF "%CONDA_ENVS_PATH%" == "" (
    REM turn relative path into absolute path
    CALL :NORMALIZEPATH CONDA_ENVS_PATH "%~dp0..envs"
)
REM Used for deactivate, to make sure we restore original state after deactivation
IF "%CONDA_PATH_BACKUP%" == "" (SET "CONDA_PATH_BACKUP=%PATH%")
set "CONDA_NEW_NAME=%~1"
IF "%~2" == "" GOTO skiptoomanyargs
    ECHO ERROR: Too many arguments provided
    GOTO usage
:skiptoomanyargs
IF "%CONDA_NEW_NAME%" == "" set "CONDA_NEW_NAME=%~dp0.."
REM Search through paths in CONDA_ENVS_PATH
REM First match will be the one used
FOR %%F IN ("%CONDA_ENVS_PATH:;=" "%") DO (
    IF EXIST "%%~F%CONDA_NEW_NAME%conda-meta" (
       SET "CONDA_NEW_PATH=%%~F%CONDA_NEW_NAME%"
       GOTO found_env
    )
)
IF EXIST "%CONDA_NEW_NAME%conda-meta" (
    SET "CONDA_NEW_PATH=%CONDA_NEW_NAME%"
    ) ELSE (
    ECHO No environment named "%CONDA_NEW_NAME%" exists in %CONDA_ENVS_PATH%, or is not a valid conda installation directory.
    EXIT /b 1
)
:found_env
SET "SCRIPT_PATH=%~dp0"
IF "%SCRIPT_PATH:~-1%"=="" SET "SCRIPT_PATH=%SCRIPT_PATH:~0,-1%"
REM Set CONDA_NEW_NAME to the last folder name in its path
FOR /F "tokens=* delims=" %%i IN ("%CONDA_NEW_PATH%") DO SET "CONDA_NEW_NAME=%%~ni"
REM special case for root env:
REM   Checks for Librarybin on PATH.  If exists, we have root env on PATH.
call :NORMALIZEPATH ROOT_PATH "%~dp0.."
CALL SET "PATH_NO_ROOT=%%PATH:%ROOT_PATH%;=%%"
IF NOT "%PATH_NO_ROOT%"=="%PATH%" SET "CONDA_DEFAULT_ENV=%ROOT_PATH%"
REM Deactivate a previous activation if it is live
IF "%CONDA_DEFAULT_ENV%" == "" GOTO skipdeactivate
    REM This search/replace removes the previous env from the path
    ECHO Deactivating environment "%CONDA_DEFAULT_ENV%"...
    REM Run any deactivate scripts
    IF NOT EXIST "%CONDA_DEFAULT_ENV%etccondadeactivate.d" GOTO nodeactivate
        PUSHD "%CONDA_DEFAULT_ENV%etccondadeactivate.d"
        FOR %%g IN (*.bat) DO CALL "%%g"
        POPD
    :nodeactivate
    REM Remove env name from PROMPT
    FOR /F "tokens=* delims=" %%i IN ("%CONDA_DEFAULT_ENV%") DO SET "CONDA_OLD_ENV_NAME=%%~ni"
    call set PROMPT=%%PROMPT:[%CONDA_OLD_ENV_NAME%] =%%
    SET "CONDACTIVATE_PATH=%CONDA_DEFAULT_ENV%;%CONDA_DEFAULT_ENV%Scripts;%CONDA_DEFAULT_ENV%Librarybin"
    CALL SET "PATH=%%PATH:%CONDACTIVATE_PATH%=%%"
    SET CONDA_DEFAULT_ENV=
:skipdeactivate
CALL :NORMALIZEPATH CONDA_DEFAULT_ENV "%CONDA_NEW_PATH%"
ECHO Activating environment "%CONDA_DEFAULT_ENV%"...
SET "PATH=%CONDA_DEFAULT_ENV%;%CONDA_DEFAULT_ENV%Scripts;%CONDA_DEFAULT_ENV%Librarybin;%PATH%"
IF "%CONDA_NEW_NAME%"=="" (
   REM Clear CONDA_DEFAULT_ENV so that this is truly a "root" environment, not an environment pointed at root
   SET CONDA_DEFAULT_ENV=
   ) ELSE (
   SET "PROMPT=[%CONDA_NEW_NAME%] %PROMPT%"
)
REM Make sure that root's Scripts dir is on PATH, for sake of keeping activate/deactivate available.
CALL SET "PATH_NO_SCRIPTS=%%PATH:%SCRIPT_PATH%=%%"
IF "%PATH_NO_SCRIPTS%"=="%PATH%" SET "PATH=%PATH%;%SCRIPT_PATH%"
REM Run any activate scripts
IF NOT EXIST "%CONDA_DEFAULT_ENV%etccondaactivate.d" GOTO noactivate
    PUSHD "%CONDA_DEFAULT_ENV%etccondaactivate.d"
    FOR %%g IN (*.bat) DO CALL "%%g"
    POPD
:noactivate
REM Trim trailing semicolon, if any
IF "%PATH:~-1%"==";" SET "PATH=%PATH:~0,-1%"
REM Clean up any double colons we may have ended up with
SET "PATH=%PATH:;;=;%"
ENDLOCAL & (
    SET "PATH=%PATH%"
    SET "PROMPT=%PROMPT%"
    SET "CONDA_DEFAULT_ENV=%CONDA_DEFAULT_ENV%"
    SET "CONDA_PATH_BACKUP=%CONDA_PATH_BACKUP%"
)
EXIT /B
:NORMALIZEPATH
    SET "%1=%~dpfn2"
    EXIT /B

任何提示都值得赞赏。

我发现,如果您从以下调用集使用单引号更改为

REM Make sure that root's Scripts dir is on PATH, for sake of keeping activate/deactivate available.
CALL SET "PATH_NO_SCRIPTS=%%PATH:%SCRIPT_PATH%=%%"
IF "%PATH_NO_SCRIPTS%"=="%PATH%" SET "PATH=%PATH%;%SCRIPT_PATH%"

自:

REM Make sure that root's Scripts dir is on PATH, for sake of keeping 
activate/deactivate available.
CALL SET ""PATH_NO_SCRIPTS=%%PATH:%SCRIPT_PATH%=%%""
IF "%PATH_NO_SCRIPTS%"=="%PATH%" SET "PATH=%PATH%;%SCRIPT_PATH%"

为我解决了这个问题。这是基于这个答案

同样的错误对我有用。

创建另一个系统变量 P1,变量是您的 Anaconda 安装位置(我的在这里):

C:\程序文件 (x86)\Anaconda3\

PATH 变量中,将这两个放在前面:

%P1%envs;%P1%Scripts;everything_else_here 

重新启动命令提示符,然后尝试再次激活 env。

我遇到了同样的问题,激活使用 conda 创建的环境也会发生这种情况。因为我对混乱的Windows PATH的问题感到恼火了很长时间,所以我的解决方案是创建一个小的python工具来整理PATH变量。它可以通过

>pip install pywinpath

其次

>pywinpath

或者,您可以从单个文件中复制并粘贴源代码 https://github.com/czamb/pywinpath/blob/master/pywinpath.py

或者从 https://github.com/czamb/pywinpath/releases 下载捆绑的.exe

然后,在 PATH 符合 Windows 长度限制后,您可以在用户或系统 PATH 的开头添加 Anaconda 的条目。相关条目可以通过调用 Anaconda Promt 并输入 echo %PATH 找到,它们是前三个条目。

还有其他工具可以编辑Windows PATH变量:https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7

最新更新