Comment installer Osintgram en 2026
Six commandes : clone, cd, création d'un virtualenv, activation, pip install -r requirements.txt, puis remplissage de config/credentials.ini. Cette séquence s'installe proprement dans un environnement Python 3.11 neuf. Ce qui casse, c'est pip lancé hors virtualenv sur les distributions dérivées de Debian, et pyreadline sur Windows natif.
Osintgram s'installe en six commandes : git clone, cd Osintgram, python3 -m venv venv, l'activation du venv, pip install -r requirements.txt, puis le remplissage de config/credentials.ini. L'installation de requirements.txt dans un virtualenv Python 3.11 propre réussit sans la moindre erreur avec un pip à jour. Les échecs d'installation rapportés se ramènent à quatre causes : pip lancé au niveau système sur Debian, Ubuntu ou Kali ; un prettytable ou un urllib3 fourni par le système qui bloque le passage ; gnureadline qui refuse de compiler ; ou pyreadline qui plante sur Windows natif.
Avant de commencer
Il vous faut un interpréteur Python 3, git, et une décision sur la façon dont Osintgram va s'authentifier. C'est le troisième point que tout le monde saute, et c'est pour cela que l'installation semble réussir avant que l'outil ne s'arrête au bout d'une ligne au premier lancement.
Le README n'indique aucune version minimale de Python ; il affiche un badge Python3 et rien d'autre. La seule version figée dans le dépôt est la première ligne du Dockerfile, FROM python:3.9.2-alpine3.13, et la dépendance la plus récente, hikerapi 1.7.1, déclare requires_python >=3.8. L'installation de requirements.txt dans un virtualenv Python 3.11 neuf fonctionne avec un pip à jour : prettytable 0.7.2, pyreadline 2.1 et hikerapi 1.7.1 ne sont publiés que sous forme de paquets source, et tous les trois se construisent sans broncher. Voyez 3.9-3.11 comme une zone de confort plutôt que comme une exigence.
- Python 3.9 à 3.11. C'est sur 3.12 et 3.13 que se concentrent les pannes rapportées, et il s'agit presque toujours d'un conflit de paquets plutôt que d'une incompatibilité du langage.
- git, ou un ZIP de la branche master. Il n'existe ni paquet PyPI ni script d'installation : le dépôt ne contient aucun
setup.sh. - Un compilateur et les en-têtes ncurses sous Linux, mais uniquement si pip doit compiler
gnureadline. Sur les distributions glibc grand public, il trouve une wheel manylinux et évite la compilation. - Des identifiants. Soit un compte Instagram que vous acceptez de perdre, soit un token HikerAPI. Décidez avant l'étape six : les deux mènent à des chemins de code différents.
Une plateforme a droit à sa propre page, parce que son interpréteur par défaut et son pip se comportent tous deux différemment de ceux d'une machine Debian ou Ubuntu standard : Osintgram sur Kali Linux.
Les six commandes
C'est la séquence du README elle-même, sans retouche. Exécutez-la entièrement depuis un seul shell : le virtualenv comme le répertoire de travail auront leur importance plus tard.
- 1
Cloner le dépôt
La branche par défaut est
master. Il existe aussi des branchesdevelopmentetv2; ignorez-les tant que vous ne savez pas précisément pourquoi vous en auriez besoin.git clone https://github.com/Datalux/Osintgram.git - 2
Se placer dans le répertoire
Pas seulement pour cette étape. Osintgram lit sa configuration via le chemin relatif
config/credentials.ini: la racine du dépôt est donc le seul répertoire depuis lequel il fonctionne correctement.cd Osintgram - 3
Créer un virtualenv
Sur Debian, Ubuntu et Kali, vous aurez peut-être besoin de
sudo apt install python3-venvau préalable. C'est le fait de sauter cette étape qui produit les trois premières erreurs du tableau plus bas.python3 -m venv venv - 4
L'activer
Votre prompt doit désormais être préfixé par
(venv). Si ce n'est pas le cas, la commande suivante installera dans le mauvais interpréteur.# Linux, macOS, Git Bash source venv/bin/activate # Windows PowerShell .\venv\Scripts\activate.ps1 - 5
Installer les dépendances
Le flag est
-r. Taper-tà la place vous vautERROR: Target path exists but is not a directory, will not continue., parce que-tsignifie--target.pip install -r requirements.txt - 6
Renseigner vos identifiants
Éditez le fichier INI à la main, ou laissez le Makefile vous poser les questions. Les deux ne sont pas équivalents. La section suivante explique pourquoi.
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.1Deux absences dans ce fichier vous dérouteront plus tard. requests n'y figure pas ; il arrive de façon transitive. httpx non plus, alors que src/Osintgram.py l'importe à la ligne 9 : il ne se résout que parce que hikerapi en dépend.
Configurer les identifiants
Le dépôt fournit config/credentials.ini déjà créé et vide. Trois champs, une seule section :
[Credentials]
username =
password =
hikerapi_token =src/config.py le charge avec configparser et l'appel littéral config.read("config/credentials.ini"). C'est à cause de ce chemin relatif que l'étape deux existe : lancez python3 ~/Osintgram/main.py sometarget depuis votre répertoire personnel et configparser ne lira silencieusement rien du tout.
Laissez le fichier tel qu'il est livré et le premier lancement s'arrête immédiatement. Avec le credentials.ini vide d'un clone tout neuf, main.py affiche une seule ligne et rien d'autre : Error: "username" field cannot be blank in "config/credentials.ini". Sont codés en dur à côté le même message pour password, ainsi que Error: missing "username" field in "config/credentials.ini" et Error: file "config/credentials.ini" not found!.
Il affiche une erreur, puis sort avec le code 0
Chaque vérification d'identifiants dans src/config.py appelle sys.exit(0), un statut de succès. Si vous pilotez Osintgram depuis un script shell ou depuis une CI, un fichier d'identifiants mal configuré ressemble exactement à une exécution réussie pour tout ce qui inspecte le code de sortie. Surveillez la sortie affichée, pas le statut.
Ce que `make setup` écrit réellement
La cible setup du Makefile est courte et en fait plus qu'elle ne l'annonce. Elle demande Instagram Username: avec read -p et Instagram Password: avec read -sp, si bien que seul le mot de passe est masqué, puis écrit elle-même le fichier. Trois conséquences non documentées. Elle réécrit credentials.ini avec uniquement [Credentials], username et password, donc tout hikerapi_token que vous aviez disparaît. Elle exécute d'abord echo -n "{}" > config/settings.json, ce qui efface toute session mise en cache. Et elle déclare SHELL := /bin/bash et utilise read -sp, donc elle a besoin de GNU make et de bash. Elle ne tournera ni dans cmd ni dans PowerShell.
Le champ hikerapi_token
Ce troisième champ change le programme que vous exécutez. src/config.py expose getHikerToken(), qui renvoie la valeur de hikerapi_token ou la variable d'environnement HIKERAPI_TOKEN. main.py se branche dessus : avec un token, il construit HikerCLI, et seulement sinon le client Osintgram classique. Avec un token défini, l'outil ne construit jamais de client Instagram et n'envoie aucun mot de passe nulle part. Vous n'avez besoin d'aucun compte Instagram. La ligne de démarrage devient Connect to HikerAPI... au lieu de Attempt to login....
HIKERAPI_TOKEN=<hikerapi token> python3 main.py <target> -c infoLe README renvoie vers hikerapi.com/tokens et indique que les « first 100 requests are free after registration and confirmation of your tg » (les 100 premières requêtes sont gratuites après inscription et confirmation de votre tg). Ensuite, c'est une API tierce payante, et chaque nom d'utilisateur que vous consultez passe par elle. C'est le compromis. C'est le chemin encore conçu pour fonctionner, et les utilisateurs rapportent qu'il fonctionne, mais l'issue ouverte #2664 (21 juin 2026) existe précisément pour gérer des formats de réponse HikerAPI alternatifs.
| Méthode de configuration | Ce qui atterrit dans credentials.ini | Compte Instagram nécessaire |
|---|---|---|
| Éditer le fichier à la main | Ceux des trois champs que vous renseignez | Uniquement si vous renseignez username et password |
make setup | username et password ; la ligne du token saute | Oui, et il réinitialise config/settings.json |
hikerapi_token ou variable d'environnement | Un token ; username et password ne sont jamais lus | Non : main.py construit HikerCLI |
Utilisez un compte jetable, et gardez-le hors de git
Le README affiche ceci en rouge : « It is advisable to not use your own/primary account when using this tool. » (il est déconseillé d'utiliser votre compte personnel ou principal avec cet outil). Un second avertissement en rouge vous dit de ne pas envoyer vos identifiants sur GitHub si vous forkez le projet. Celui-là compte plus qu'il n'y paraît : config/credentials.ini est committé dans le dépôt, donc bien que .gitignore le mentionne, Git n'ignore rien de ce qu'il suit déjà. Vérifiez git status avant de pousser un fork. Osintgram s'authentifie en votre nom et se comporte comme un client automatisé ; tout ce qu'Instagram décidera à ce sujet retombera sur le compte inscrit dans ce fichier.
Vérifier que tout a fonctionné
Deux vérifications, dans l'ordre : la première prouve que l'arbre de dépendances s'est résolu, la seconde que l'outil sait lire votre configuration. Lancez-les toutes les deux depuis la racine du dépôt, venv actif.
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 infoSi la première affiche ok, votre installation est terminée. Si la seconde affiche une erreur de champ vide, revenez à la section sur les identifiants. Si elle affiche Attempt to login... ou Connect to HikerAPI..., l'installation est bel et bien faite et tout ce qui suit cette ligne relève d'Instagram.
Une dernière à anticiper : ModuleNotFoundError: No module named 'src.Osintgram' signifie que vous avez lancé main.py depuis un autre endroit que la racine du dépôt. C'est l'issue #105, et le correctif est cd Osintgram, à chaque fois.
Les erreurs d'installation et ce qu'elles signifient vraiment
Chaque chaîne de la colonne de gauche provient du tracker d'issues du projet ou a été reproduite localement sur un clone propre. Aucune ne vient d'Instagram : elles surviennent toutes avant qu'une seule requête ne quitte votre machine.
| Texte de l'erreur | Ce que cela signifie vraiment | Correctif |
|---|---|---|
error: externally-managed-environment | PEP 668. Debian 12+, Ubuntu 23.04+ et Kali refusent les installations pip à l'échelle du système. | Faites l'étape du venv. Kali le documente ; sudo apt install python3-venv si venv est absent. |
ModuleNotFoundError: No module named 'urllib3.packages.six.moves' | Le python3-requests d'apt mélangé à l'urllib3 2.x de pip. L'indice, c'est un chemin sous ~/.local/lib/python3.12/site-packages/, qui trahit un --break-system-packages. | Supprimez les paquets du user-site, réinstallez dans un venv propre (#1766). |
Cannot uninstall prettytable 3.10.1 / no RECORD file was found for prettytable | pip tente de supprimer le python3-prettytable d'apt pour satisfaire la version figée prettytable==0.7.2. | Un venv sans --system-site-packages évite le problème (#1126). |
/usr/bin/ld: cannot find -lncurses | gnureadline compile depuis les sources sans en-têtes ncurses présents. | sudo apt install -y build-essential libncurses-dev (#183). |
ModuleNotFoundError: No module named 'pyreadline' sous Linux | Trompeur. main.py rattrape un import gnureadline en échec avec un except nu et bascule sur pyreadline, que requirements.txt n'installe que sous Windows. | Ignorez pyreadline ; corrigez la compilation de gnureadline ci-dessus. |
AttributeError: module 'collections' has no attribute 'Callable' | pyreadline 2.1 sur Python 3.10+ sous Windows natif. Plante à la ligne 108 de main.py. | Voir la section Windows : pip install pyreadline3 n'est pas le correctif (#2668). |
AttributeError: 'HTMLParser' object has no attribute 'unescape' | prettytable 0.7.2 se construit contre un setuptools trop ancien ; HTMLParser.unescape() a disparu en Python 3.9. | pip install --upgrade pip setuptools wheel d'abord (issue #334). |
ModuleNotFoundError: No module named 'src.Osintgram' | main.py lancé en dehors de la racine du dépôt. | cd Osintgram d'abord. |
ERROR: Target path exists but is not a directory, will not continue. | pip install -t requirements.txt ; -t, c'est --target, une destination d'installation. | Le flag est -r (#2666). |
Les trois premières lignes ne surviennent que lorsque pip s'exécute contre l'interpréteur système : elles disparaissent dès l'instant où vous utilisez réellement le venv. C'est pour cela que l'étape trois n'est pas une formalité.
Windows et WSL
Sous Windows natif, l'installation des dépendances se passe bien. Cloner master et installer requirements.txt dans un venv Python 3.11 réussit, et le pyreadline 2.1 réservé à Windows se compile depuis les sources sans erreur. Ce qui échoue, c'est l'étape juste après, avant même qu'argparse n'ait lu vos arguments :
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 a été supprimé dans Python 3.10 et déplacé vers collections.abc ; la dernière publication de pyreadline 2.1 remonte à 2020. main.py atteint cette ligne parce que son import de readline est un try: import gnureadline / except: import pyreadline, et que requirements.txt n'installe pyreadline que sous Windows. Windows est donc le seul chemin qui touche le module cassé.
pyreadline3 n'est pas un remplaçant direct
C'est le conseil que l'on lit dans tous les fils de forum, et il ne marche pas ici. Dans un venv propre, après pip install pyreadline3, python -c "import pyreadline" lève toujours ModuleNotFoundError: No module named 'pyreadline' alors que import pyreadline3 réussit. Le paquet s'installe sous un autre nom de module, et main.py code en dur import pyreadline.
Quatre choses qui, elles, fonctionnent :
- Patcher pyreadline. Dans
venv\Lib\site-packages\pyreadline\py3k_compat.py, remplacezcollections.Callableà la ligne 8 parcollections.abc.Callable. Vérifié : main.py va alors jusqu'à la vérification des identifiants. - Patcher main.py à la place. Remplacez le repli par
import pyreadline3 as pyreadline. Même résultat, mais c'est une modification de code suivi par git, quegit pullviendra vous disputer. - Passer par WSL. Dans un shell Ubuntu ou Debian sous WSL, vous êtes sur le chemin Linux : le marqueur d'environnement sélectionne gnureadline, pyreadline n'est jamais installé, et les six mêmes commandes s'appliquent telles quelles. PEP 668 s'y applique aussi, donc gardez le venv.
- Utiliser Python 3.9 sous Windows, où
collections.Callableexiste encore. Ça marche, mais ça vieillit mal.
WSL est la recommandation honnête : chaque chemin de code, chaque trace du tracker et le conteneur du projet lui-même supposent Linux. Git Bash est un demi-compromis (le README y documente source venv/bin/activate), mais il exécute quand même l'interpréteur Windows, et se heurte donc toujours à la ligne 108.
Docker
Le dépôt fournit un Dockerfile, un docker-compose.yml et un Makefile. Docker est le seul chemin qui contourne entièrement la question de la version de Python, parce que l'image fige son propre interpréteur.
make setup
docker build -t osintgram .
docker run --rm -it \
-v "$PWD/output:/home/osintgram/output" osintgram <target>L'image contient votre mot de passe Instagram
Le troisième COPY du Dockerfile est COPY --chown=osintgram:osintgram config/ /home/osintgram/config : credentials.ini est donc cuit dans les couches de l'image au moment du build. C'est ce que veut dire le README avec « Your container will fail if you do not do step #3 and configure your credentials » (votre conteneur échouera si vous ne faites pas l'étape 3 et ne configurez pas vos identifiants). Traitez le build comme un artefact porteur de secrets : ne le poussez jamais vers un registry, ne partagez jamais le tar exporté.
Deux autres faits côté Docker. L'image de base est python:3.9.2-alpine3.13, une build de mars 2021. C'est exactement pour cela que le conteneur esquive les conflits de 3.12 et 3.13, et aussi pour cela qu'il est l'élément le moins patché de votre machine. Et les cibles run, build-run-testing et cleanup-testing du Makefile appellent toutes docker-compose, le binaire v1 avec tiret que les installations Docker modernes ne fournissent plus.
Les mythes qui vous font perdre du temps
Quatre affirmations reviennent en boucle dans les guides d'installation d'Osintgram. Toutes les quatre sont vérifiables dans le code source, et toutes les quatre sont fausses.
- « Python 3.12 a supprimé distutils, donc Osintgram ne peut pas s'installer. » Le setup.py de prettytable 0.7.2 commence par
from setuptools import setup: aucun import de distutils nulle part, et l'isolation de build par défaut de pip fournit son propre setuptools. Tout le tracker d'issues contient une seule mention de distutils, et la vraie trace de cette issue est une erreur d'expiration de cookie. - « Il vous faut geckodriver, Selenium ou Pillow. » Un grep sur
src/Osintgram.py(le moteur en entier, ses 60 586 octets) à la recherche deselenium,geckodriver,webdriver,PillowouPILne renvoie aucune correspondance. Il n'y a aucune couche d'automatisation de navigateur : l'outil parle HTTP à l'API mobile privée d'Instagram, et à HikerAPI via httpx. Les téléchargements passent parurllib.request.urlretrieve. - « Il suffit de lancer
sudo apt install osintgram. » Debian ne package pas Osintgram, et le catalogue d'outils de Kali non plus. Il n'existe pas non plus de paquet PyPI : cloner le dépôt est donc le seul canal de distribution. - « Éditez config.py et mettez-y vos identifiants. » Il n'y a pas de
config.pyà la racine du dépôt. Il y asrc/config.py, qui est du code auquel vous ne touchez pas ; les identifiants vivent dansconfig/credentials.ini.
Un cinquième : python3 main.py tout seul ne lance rien. argparse déclare id comme un positionnel obligatoire, vous obtenez donc usage: main.py [-h] [-C] [-j] [-f] [-c COMMAND] [-o OUTPUT] id puis une sortie. Osintgram ne peut pas être lancé sans nom d'utilisateur cible.
C'est installé, mais la connexion échoue
L'échec de connexion est le plus gros obstacle pratique en 2026, et ce n'est pas un problème d'installation. Votre installation s'est terminée à l'instant où pip a fini et où la vérification d'import est passée. Tout ce qui s'affiche après Attempt to login... appartient à Instagram.
L'issue #2627, ouverte le 4 mars 2026, rapporte ClientError checkpoint_required avec une checkpoint_url valant https://i.instagram.com/web/unsupported_version/ : Instagram rejette la version d'API de la bibliothèque, pas votre mot de passe. L'issue #2630 (2 avril 2026) rapporte ClientError Bad Request: block_eu_user_login_in_old_app. L'auteur de la PR #2660 décrit la réponse bad_password comme « actually a bot detection, not wrong password » (en réalité une détection de bot, pas un mauvais mot de passe). Aucune commande pip ne corrige quoi que ce soit là-dedans ; le tableau complet est dans Osintgram fonctionne-t-il encore en 2026 ?.
Si vous vous retrouvez au contraire avec un shell fonctionnel, la suite logique est la référence des commandes : ce que chacune renvoie, où atterrissent les fichiers produits, et lesquelles vous font limiter. C'est comment utiliser Osintgram. Si votre cible est privée, lisez d'abord ce qu'Osintgram peut et ne peut pas y faire.