我有一个安装脚本,用于安装特定的 github 存储库及其所有要求。
这是似乎不一致的安装程序 snipit:
@echo off
REM Check if Python 3.11 is installed
python --version 2>&1 | findstr /I "3.11"
if %ERRORLEVEL% NEQ 0 (
echo Python 3.11 is not installed. Please install Python 3.11 from the official website.
exit /b 1
)
REM Check if Git is installed
where git > nul 2>&1
if %ERRORLEVEL% NEQ 0 (
echo Git is not installed. Installing Git...
powershell -Command "Start-Process https://git-scm.com/download/win -Wait"
)
REM Check if Node.js and npm are installed
node --version 2>&1 | findstr /I "v"
if %ERRORLEVEL% NEQ 0 (
echo Node.js is not installed. Please install Node.js with npm from the official website.
exit /b 1
)
REM Check if Python requests library is installed
pip show requests | findstr /I "Name: requests"
if %ERRORLEVEL% NEQ 0 (
echo Installing requests...
pip install requests
)
REM Set the installation directory to the user's home directory
set "repo_dir=%USERPROFILE%\algorithm-trader-warframe"
mkdir "%repo_dir%" 2>nul
cd /d "%repo_dir%"
REM Clone the Git repository into the specified directory
if exist "%repo_dir%\Warframe-Algo-Trader" (
echo Repository is already cloned in %repo_dir%\Warframe-Algo-Trader.
) else (
echo Cloning the Git repository into %repo_dir%\Warframe-Algo-Trader...
git clone https://github.com/akmayer/Warframe-Algo-Trader
)
REM Install Python dependencies
pip install -r "%repo_dir%\Warframe-Algo-Trader\requirements.txt"
pip install uvicorn
REM Set the installation directory to the 'my-app' folder
cd /d "%repo_dir%\Warframe-Algo-Trader\my-app"
REM Check if Node.js dependencies are already installed
if exist "node_modules" (
echo Node.js dependencies are already installed.
) else (
echo Installing Node.js dependencies...
npm install --no-fund
REM Wait for npm installation to complete
:WAIT_NPM_INSTALL
if not exist "node_modules" (
timeout /t 5 /nobreak > nul
goto WAIT_NPM_INSTALL
)
)
REM Go back to the main 'Warframe-Algo-Trader' folder
cd /d "%repo_dir%\Warframe-Algo-Trader"
REM Remove the existing config.json file (if it exists)
if exist "config.json" del "config.json"
REM Initialize the tables and create a new config.json file
python init.py
当不继续执行 python init.py 和其他脚本时,该问题始终会发生。一致的解决方案是运行脚本两次。现在我有一个理论,这可能是由于时间不当造成的,但除此之外,我无法在网上或通过 GPT 找到任何表明问题原因及其解决方案的内容。
我已经尝试添加超时和等待循环,但它似乎不起作用。该脚本总是在第二次运行时起作用,我想将其最小化为仅一次,而无需将所有内容缝合在一起。
嗯.. 对于常规批量生产商来说,第一个问题是 Mingw 正在运行的未提及的问题。
Mingw 会覆盖一些标准批处理实用程序的正常操作,因此需要提及。
我相信这不是问题。
第一件事:“第二次工作”的原因通常是批处理文件的标准打开
尚未被关注。这会在批处理结束时放弃对环境所做的任何更改,因此由一个批处理文件建立的变量不会影响可能在同一会话中运行的任何其他批处理。
因此,结论是环境变量是由第一次运行建立的,在第一次运行结束时没有删除,然后在第二次运行中使用。
因此,很可能
set
在第一次运行中执行一条语句,该语句建立了先前步骤中使用的变量。这可能是explicit
(变量在脚本中通过名称提及)或implicit
(变量由下标或实用程序使用)。或者可能是在第一次运行时建立了一个假定在某个时刻存在的目录,或者假定当前目录与其实际位置不同。所以候选人是
或由下标建立的某个变量或开始时的当前目录,因为似乎有
cd
未撤消的指令(setlocal
批处理结束时恢复原始目录)所以 - 我建议在脚本开始时进行设置
repo_dir
,然后创建所需的子目录。下一个问题是
it doesnt proceed with python init.py and the other scripts
。由于python init.py
是最后一行,我认为这other scripts
是问题所在 - 但我不知道它们是什么。也许运行它们取决于当前目录是否正确,也许取决于repo_dir
.最后,
是行不通的。(带括号的语句序列
code block
)不能包含标签。更有可能工作