Como instalar o Osintgram em 2026
Seis comandos: clone, cd, criar um ambiente virtual, ativar, pip install -r requirements.txt e então preencher config/credentials.ini. Essa sequência instala sem erro nenhum em um ambiente Python 3.11 novo; o que quebra é o pip rodando fora de um ambiente virtual em distros baseadas no Debian, e o pyreadline no Windows nativo.
O Osintgram se instala em seis comandos: git clone, cd Osintgram, python3 -m venv venv, ativar o ambiente, pip install -r requirements.txt e preencher config/credentials.ini. Instalar o requirements.txt em um ambiente virtual Python 3.11 limpo, com o pip atual, funciona sem nenhum erro. As falhas de instalação que as pessoas relatam se concentram em quatro coisas: o pip rodando no sistema inteiro no Debian, no Ubuntu ou no Kali; um prettytable ou urllib3 empacotado pelo sistema atrapalhando; o gnureadline falhando ao compilar; ou o pyreadline quebrando no Windows nativo.
Antes de começar
Você precisa de um interpretador Python 3, do git e de uma decisão sobre como o Osintgram vai se autenticar. A terceira é a parte que todo mundo pula, e é por isso que a instalação parece dar certo e a ferramenta encerra logo na primeira linha da primeira execução.
O README nunca informa uma versão mínima do Python; ele traz um badge Python3 e nada além disso. A única versão fixada no repositório é a primeira linha do Dockerfile, FROM python:3.9.2-alpine3.13, e a dependência mais recente, hikerapi 1.7.1, declara requires_python >=3.8. Instalar o requirements.txt em um ambiente virtual Python 3.11 novo funciona com o pip atual: prettytable 0.7.2, pyreadline 2.1 e hikerapi 1.7.1 são publicados apenas como source distribution, e os três compilam sem reclamar. Trate 3.9-3.11 como faixa ideal, não como requisito.
- Python 3.9 a 3.11. É no 3.12 e no 3.13 que as quebras relatadas se concentram, e quase sempre é uma colisão de empacotamento, não uma incompatibilidade da linguagem.
- git, ou um ZIP da branch master. Não existe pacote no PyPI nem script de instalação: o repositório não tem nenhum
setup.sh. - Um compilador e os headers do ncurses no Linux, mas só se o pip tiver que compilar o
gnureadline. Nas distros glibc convencionais ele encontra uma wheel manylinux e pula a compilação. - Credenciais. Ou uma conta do Instagram que você esteja disposto a perder, ou um token da HikerAPI. Decida antes do passo seis: são dois caminhos de código diferentes.
Uma plataforma ganhou página própria, porque tanto o interpretador padrão quanto o pip dela se comportam de forma diferente de uma máquina Debian ou Ubuntu comum: Osintgram no Kali Linux.
Os seis comandos
Esta é a sequência do próprio README, sem alteração nenhuma. Rode tudo a partir de um único shell: o ambiente virtual e o diretório de trabalho vão importar mais adiante.
- 1
Clone o repositório
A branch padrão é a
master. Também existem as branchesdevelopmentev2; ignore as duas, a não ser que você saiba por que quer usá-las.git clone https://github.com/Datalux/Osintgram.git - 2
Entre no diretório
E não é só por causa deste passo. O Osintgram lê a configuração pelo caminho relativo
config/credentials.ini, então a raiz do repositório é o único diretório de onde ele roda corretamente.cd Osintgram - 3
Crie um ambiente virtual
No Debian, no Ubuntu e no Kali você pode precisar de um
sudo apt install python3-venvantes. Pular esse passo é o que produz os três primeiros erros da tabela mais abaixo.python3 -m venv venv - 4
Ative o ambiente
Seu prompt agora deve estar com o prefixo
(venv). Se não estiver, o próximo comando instala tudo no interpretador errado.# Linux, macOS, Git Bash source venv/bin/activate # Windows PowerShell .\venv\Scripts\activate.ps1 - 5
Instale as dependências
A flag é
-r. Digitar-tno lugar dela te rendeERROR: Target path exists but is not a directory, will not continue., porque-tsignifica--target.pip install -r requirements.txt - 6
Preencha suas credenciais
Edite o arquivo INI na mão, ou deixe o Makefile perguntar por você. Não são equivalentes; a próxima seção explica por quê.
nano config/credentials.ini # or, with GNU make and bash available: make setup
requests-toolbelt==0.9.1
geopy>=2.0.0
prettytable==0.7.2
instagram-private-api==1.6.0
gnureadline>=8.0.0; platform_system != "Windows"
pyreadline==2.1; platform_system == "Windows"
hikerapi==1.7.1Duas ausências nesse arquivo vão te confundir depois. requests não está listado; ele chega por transitividade. httpx também não, e src/Osintgram.py o importa na linha 9; só resolve porque hikerapi depende dele.
Configurando as credenciais
O repositório já vem com config/credentials.ini criado e em branco. Três campos, uma seção:
[Credentials]
username =
password =
hikerapi_token =src/config.py carrega o arquivo com o configparser e a chamada literal config.read("config/credentials.ini"). Esse caminho relativo é o motivo de o passo dois existir: rode python3 ~/Osintgram/main.py sometarget a partir da sua home e o configparser lê exatamente nada, em silêncio.
Deixe o arquivo do jeito que ele vem e a primeira execução para na hora. Com o credentials.ini em branco de um clone novo, o main.py imprime uma linha e mais nada: Error: "username" field cannot be blank in "config/credentials.ini". Ao lado dela estão hardcoded a mesma mensagem para password, mais Error: missing "username" field in "config/credentials.ini" e Error: file "config/credentials.ini" not found!.
Ele imprime um erro e sai com código 0
Toda verificação de credencial em src/config.py chama sys.exit(0) (status de sucesso). Se você controla o Osintgram por um shell script ou por CI, um arquivo de credenciais mal configurado fica idêntico a uma execução limpa para qualquer coisa que olhe o código de saída. Verifique a saída, não o status.
O que o `make setup` realmente escreve
O target setup do Makefile é curto e faz mais do que anuncia. Ele pergunta Instagram Username: com read -p e Instagram Password: com read -sp, ou seja, só a senha fica oculta, e depois escreve o arquivo por conta própria. Três consequências não documentadas. Ele sobrescreve o credentials.ini apenas com [Credentials], username e password, então qualquer hikerapi_token que você tinha desaparece. Ele roda echo -n "{}" > config/settings.json antes disso, apagando qualquer sessão em cache. E ele declara SHELL := /bin/bash e usa read -sp, então precisa do GNU make e do bash: não vai rodar no cmd nem no PowerShell.
O campo hikerapi_token
Esse terceiro campo muda qual programa você está rodando. src/config.py expõe getHikerToken(), que devolve o valor de hikerapi_token ou a variável de ambiente HIKERAPI_TOKEN. O main.py se ramifica a partir disso: com um token ele constrói o HikerCLI, e só na ausência dele o cliente Osintgram clássico. Com um token definido, a ferramenta nunca monta um cliente do Instagram e nunca envia senha para lugar nenhum. Você não precisa de conta no Instagram. A linha de inicialização vira Connect to HikerAPI... em vez de Attempt to login....
HIKERAPI_TOKEN=<hikerapi token> python3 main.py <target> -c infoO README aponta para hikerapi.com/tokens e diz que as "first 100 requests are free after registration and confirmation of your tg" (as 100 primeiras requisições são gratuitas após o registro e a confirmação do seu tg). Depois disso é uma API paga de terceiros, e todo nome de usuário que você consultar passa por ela. É essa a troca. É o caminho que ainda foi projetado para funcionar, e os usuários relatam que funciona, mas a issue aberta #2664 (21 de junho de 2026) existe justamente para lidar com formatos alternativos de resposta da HikerAPI.
| Caminho de credencial | O que vai parar no credentials.ini | Precisa de conta no Instagram |
|---|---|---|
| Editar o arquivo na mão | Os campos, entre os três, que você preencher | Só se você preencher username e password |
make setup | username e password; a linha do token é descartada | Sim, e ele ainda reseta o config/settings.json |
hikerapi_token ou variável de ambiente | Um token; username e password nunca são lidos | Não: o main.py constrói o HikerCLI |
Use uma conta descartável, e mantenha ela fora do git
O README traz isto em vermelho: "It is advisable to not use your own/primary account when using this tool." (é aconselhável não usar sua própria conta principal ao usar esta ferramenta). Um segundo aviso em vermelho diz para você não subir suas credenciais para o GitHub caso faça um fork do projeto. Esse importa mais do que parece: config/credentials.ini está commitado no repositório, então, embora o .gitignore cite o arquivo, o Git não ignora nada que já esteja rastreando. Confira o git status antes de dar push em um fork. O Osintgram se autentica como você e se comporta como um cliente automatizado; seja lá o que o Instagram decidir sobre isso, quem paga é a conta que está nesse arquivo.
Confira se deu certo
Duas verificações, nesta ordem: a primeira prova que a árvore de dependências resolveu, a segunda prova que a ferramenta consegue ler a sua configuração. Rode as duas a partir da raiz do repositório, com o venv ativo.
cd Osintgram
source venv/bin/activate
# 1. does the package tree import?
python -c "from src.Osintgram import Osintgram; print('ok')"
# 2. does it read your credentials and reach login?
python3 main.py <target username> --command infoSe a primeira imprimir ok, sua instalação acabou. Se a segunda imprimir um erro de campo em branco, volte para a seção de credenciais. Se ela imprimir Attempt to login... ou Connect to HikerAPI..., a instalação está pronta e tudo depois dessa linha é problema do Instagram.
Mais um para você já antecipar: ModuleNotFoundError: No module named 'src.Osintgram' quer dizer que você iniciou o main.py de algum lugar que não é a raiz do repositório. Essa é a issue #105, e a correção é cd Osintgram, sempre.
Erros de instalação e o que eles realmente significam
Toda string da coluna da esquerda veio do issue tracker do projeto ou foi reproduzida localmente em um clone limpo. Nenhuma delas é do lado do Instagram; todas acontecem antes de uma única requisição sair da sua máquina.
| Texto do erro | O que isso realmente significa | Correção |
|---|---|---|
error: externally-managed-environment | PEP 668. Debian 12+, Ubuntu 23.04+ e Kali recusam instalações do pip no sistema inteiro. | Faça o passo do venv. O Kali documenta isso; sudo apt install python3-venv se o venv estiver faltando. |
ModuleNotFoundError: No module named 'urllib3.packages.six.moves' | O python3-requests do apt misturado com o urllib3 2.x do pip. O sinal claro é um caminho dentro de ~/.local/lib/python3.12/site-packages/, que denuncia um --break-system-packages. | Apague os pacotes do user-site e reinstale em um venv limpo (#1766). |
Cannot uninstall prettytable 3.10.1 / no RECORD file was found for prettytable | O pip tentando remover o python3-prettytable do apt para atender ao pin prettytable==0.7.2. | Um venv sem --system-site-packages evita o problema (#1126). |
/usr/bin/ld: cannot find -lncurses | O gnureadline compilando do código-fonte sem os headers do ncurses presentes. | sudo apt install -y build-essential libncurses-dev (#183). |
ModuleNotFoundError: No module named 'pyreadline' no Linux | Enganoso. O main.py captura um import gnureadline que falhou com um except pelado e cai no pyreadline, que o requirements.txt só instala no Windows. | Ignore o pyreadline; corrija a compilação do gnureadline acima. |
AttributeError: module 'collections' has no attribute 'Callable' | pyreadline 2.1 no Python 3.10+ em Windows nativo. Quebra na linha 108 do main.py. | Veja a seção de Windows: pip install pyreadline3 não é a correção (#2668). |
AttributeError: 'HTMLParser' object has no attribute 'unescape' | prettytable 0.7.2 sendo compilado contra um setuptools antigo; HTMLParser.unescape() deixou de existir no Python 3.9. | pip install --upgrade pip setuptools wheel antes de tudo (issue #334). |
ModuleNotFoundError: No module named 'src.Osintgram' | main.py iniciado de fora da raiz do repositório. | cd Osintgram primeiro. |
ERROR: Target path exists but is not a directory, will not continue. | pip install -t requirements.txt; -t é --target, um destino de instalação. | A flag é -r (#2666). |
As três primeiras linhas só acontecem quando o pip roda contra o interpretador do sistema, então elas somem no instante em que você de fato usa o venv. É por isso que o passo três não é cerimônia.
Windows e WSL
No Windows nativo, a instalação das dependências vai bem. Clonar a master e instalar o requirements.txt em um venv com Python 3.11 funciona, e o pyreadline 2.1, exclusivo do Windows, compila do código-fonte sem erro. O que falha é a coisa logo em seguida, antes de o argparse ter lido um único argumento seu:
File "...\Osintgram\main.py", line 108, in <module>
pyreadline.Readline().parse_and_bind("tab: complete")
File "...\pyreadline\py3k_compat.py", line 8, in callable
return isinstance(x, collections.Callable)
AttributeError: module 'collections' has no attribute 'Callable'collections.Callable foi removido no Python 3.10 e movido para collections.abc; o pyreadline 2.1 teve sua última versão publicada em 2020. O main.py chega nessa linha porque o import de readline dele é um try: import gnureadline / except: import pyreadline, e o requirements.txt instala o pyreadline só no Windows. Ou seja, o Windows é o único caminho que encosta no módulo quebrado.
pyreadline3 não é um substituto direto
Esse é o conselho de toda thread de fórum, e ele não funciona aqui. Em um venv limpo, depois de um pip install pyreadline3, python -c "import pyreadline" continua levantando ModuleNotFoundError: No module named 'pyreadline', enquanto import pyreadline3 funciona. O pacote instala sob outro nome de módulo, e o main.py tem import pyreadline hardcoded.
Quatro coisas que funcionam de verdade:
- Corrija o pyreadline. Em
venv\Lib\site-packages\pyreadline\py3k_compat.py, troquecollections.Callablena linha 8 porcollections.abc.Callable. Verificado: o main.py então roda até a verificação de credenciais. - Ou corrija o main.py. Mude o fallback para
import pyreadline3 as pyreadline. Mesmo resultado, mas é uma alteração em código rastreado, e ogit pullvai brigar com você por causa dela. - Use o WSL. Dentro de um shell WSL com Ubuntu ou Debian você está no caminho Linux: o environment marker seleciona o gnureadline, o pyreadline nunca é instalado, e os mesmos seis comandos valem sem uma vírgula de mudança. A PEP 668 também vale ali, então mantenha o venv.
- Use Python 3.9 no Windows, onde
collections.Callableainda existe. Funciona, envelhece mal.
O WSL é a recomendação honesta: todo caminho de código, todo traceback do tracker e o próprio contêiner do projeto pressupõem Linux. O Git Bash é um meio-termo parcial (o README documenta source venv/bin/activate para ele), mas ele ainda roda o interpretador do Windows, então ainda bate na linha 108.
Docker
O repositório traz um Dockerfile, um docker-compose.yml e um Makefile. O Docker é o único caminho que contorna por completo a questão da versão do Python, porque a imagem fixa o próprio interpretador.
make setup
docker build -t osintgram .
docker run --rm -it \
-v "$PWD/output:/home/osintgram/output" osintgram <target>A imagem contém a sua senha do Instagram
O terceiro COPY do Dockerfile é COPY --chown=osintgram:osintgram config/ /home/osintgram/config, então o credentials.ini fica embutido nas camadas da imagem no momento do build. É isso que o README quer dizer com "Your container will fail if you do not do step #3 and configure your credentials" (seu contêiner vai falhar se você não fizer o passo #3 e configurar suas credenciais). Trate o build como um artefato que carrega credenciais: nunca dê push dele em um registry, nunca compartilhe o tar exportado.
Mais dois fatos sobre o Docker. A imagem base é python:3.9.2-alpine3.13, um build de março de 2021. É exatamente por isso que o contêiner escapa das colisões do 3.12 e do 3.13, e também por isso que ele é a coisa menos atualizada da sua máquina. E os targets run, build-run-testing e cleanup-testing do Makefile chamam todos o docker-compose, o binário v1 com hífen que as instalações modernas do Docker não fornecem mais.
Mitos que fazem você perder tempo
Quatro afirmações aparecem sem parar nos guias de instalação do Osintgram. Todas as quatro dá para conferir direto no código-fonte, e todas as quatro estão erradas.
- "O Python 3.12 removeu o distutils, então o Osintgram não instala." O setup.py do prettytable 0.7.2 começa com
from setuptools import setup. Não há import de distutils em lugar nenhum dele, e o build isolation padrão do pip provisiona o próprio setuptools. O issue tracker inteiro tem uma única menção a distutils, e o traceback real daquela issue é um erro de expiração de cookie. - "Você precisa de geckodriver, Selenium ou Pillow." Fazer grep em
src/Osintgram.py(o motor inteiro, todos os seus 60.586 bytes) porselenium,geckodriver,webdriver,PillowouPILretorna zero resultados. Não existe camada de automação de navegador: a ferramenta fala HTTP com a API mobile privada do Instagram, e com a HikerAPI via httpx. Os downloads usamurllib.request.urlretrieve. - "É só rodar
sudo apt install osintgram." O Debian não empacota o Osintgram, e o catálogo de ferramentas do Kali também não. Não existe pacote no PyPI tampouco, então clonar o repositório é o único canal de distribuição. - "Edite o config.py e coloque suas credenciais lá." Não existe
config.pyna raiz do repositório. Existe osrc/config.py, que é código e você não edita; as credenciais moram emconfig/credentials.ini.
Tem um quinto: python3 main.py sozinho não inicia nada. O argparse declara id como posicional obrigatório, então o que você recebe é usage: main.py [-h] [-C] [-j] [-f] [-c COMMAND] [-o OUTPUT] id e uma saída. O Osintgram não pode ser iniciado sem um nome de usuário alvo.
Instalou, mas o login falha
A falha de login é o maior bloqueio prático em 2026, e ela não é um problema de instalação. Sua instalação terminou no momento em que o pip concluiu e a verificação de import passou. Tudo que é impresso depois de Attempt to login... pertence ao Instagram.
A issue #2627, aberta em 4 de março de 2026, relata ClientError checkpoint_required com um checkpoint_url apontando para https://i.instagram.com/web/unsupported_version/: é o Instagram rejeitando a versão de API da biblioteca, não a sua senha. A issue #2630 (2 de abril de 2026) relata ClientError Bad Request: block_eu_user_login_in_old_app. O autor do PR #2660 descreve a resposta bad_password como "actually a bot detection, not wrong password" (na verdade uma detecção de bot, não senha errada). Nenhum comando do pip conserta nada disso; o quadro completo está em O Osintgram ainda funciona em 2026?.
Se em vez disso você conseguiu um shell funcionando, a próxima coisa que você quer é a referência de comandos: o que cada comando devolve, onde a saída vai parar e quais deles te fazem levar throttling. Isso está em como usar o Osintgram. Se o seu alvo for privado, leia antes o que o Osintgram pode e não pode fazer nesse caso.