AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 76924207
Accepted
zfa- 2
zfa- 2
Asked: 2023-08-18 02:25:16 +0800 CST2023-08-18 02:25:16 +0800 CST 2023-08-18 02:25:16 +0800 CST

Meu script de instalação para um programa trava depois de instalar o npm do node.js e não continua

  • 772

Eu tenho um script de instalação que instala um repositório github específico e todos os seus requisitos.

este é o trecho do instalador que parece inconsistente:

@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

O problema ocorre consistentemente onde ele não continua com o python init.py e os outros scripts. uma solução consistente é executar o script duas vezes. agora tenho uma teoria que provavelmente se deve a um timing inadequado, mas, além disso, não consigo encontrar nada online ou por meio do GPT que sugira a causa do problema e sua solução.

Já tentei adicionar timeouts e loops de espera, mas não parece funcionar. O script sempre funciona na segunda vez em que é executado e eu gostaria de minimizar isso para apenas uma vez sem juntar as coisas.

node.js
  • 1 1 respostas
  • 24 Views

1 respostas

  • Voted
  1. Best Answer
    Magoo
    2023-08-18T04:34:29+08:002023-08-18T04:34:29+08:00

    Hmm.. o primeiro problema para dosadores regulares é o assunto não mencionado de que o Mingw está em operação.

    O Mingw substitui a operação normal de alguns utilitários de lote padrão, portanto, precisa ser mencionado.

    Acredito que isso não seja um problema aqui.

    Primeira questão: a causa de "funciona na segunda vez" é normalmente que a abertura padrão de um arquivo em lote

    @echo off
    setlocal
    

    não foi seguido. Isso descarta quaisquer alterações feitas no ambiente quando o lote terminar, de modo que as variáveis ​​estabelecidas por um arquivo de lote não afetem nenhum outro lote que possa ser executado na mesma sessão.

    A conclusão, portanto, é que uma variável de ambiente está sendo estabelecida pela primeira execução, não excluída quando a primeira execução termina e é usada na segunda execução.

    Portanto - provavelmente há uma setinstrução sendo executada na primeira execução que estabelece uma variável usada em uma etapa anterior. Isso pode ser explicit(a variável é mencionada pelo nome no script) ou implicit(a variável é usada por um índice ou utilitário). Ou pode ser que um diretório seja estabelecido na primeira execução que se supõe existir em algum ponto, ou que se supõe que o diretório atual seja diferente de sua localização real.

    Portanto, os candidatos são

    repo_dir
    

    ou alguma variável estabelecida por um subscrito OU o diretório atual no início, pois parece haver cdinstruções que não estão sendo desfeitas ( setlocalrestaura o diretório original quando o batchh termina)

    Portanto, aconselho configurar repo_dirno início do script e, em seguida, criar o(s) subdiretório(s) necessário(s).

    O próximo problema é it doesnt proceed with python init.py and the other scripts. Como python init.py é a última linha, considero o other scriptsproblema - mas não sei o que são. Talvez executá-los dependa de ter o diretório correto como atual, talvez dependente de repo_dir.

    Finalmente,

    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
        )
    )
    

    não vai funcionar. A code block(sequência de declarações entre parênteses) não pode conter um rótulo.

    REM Check if Node.js dependencies are already installed
    if exist "node_modules" (
        echo Node.js dependencies are already installed.
        goto nodejsinstalled
    )
    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
    )
    
    :nodejsinstalled
    

    É mais provável que funcione

    • 0

relate perguntas

  • Rest-Api Dynamic Image Path e Express excepto

  • módulo bcrypt não está funcionando de forma assíncrona

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve