Comment inclure des paquets Python tiers dans Sublime Text 2 plugins

J'écris un plugin sublime text 2 qui utilise un module SEAPI.py qui en soi importe le module requests .

Puisque sublime text 2 utilise son propre interpréteur Python intégré, il ne voit pas le module requests installé sur ma machine ubuntu (j'obtiens l'erreur suivante: ImportError: aucun module nommé requests).

La meilleure solution que j'ai pu trouver jusqu'à présent était de copier le module 'requests' (tout le répertoire des fichiers) à partir de / usr / lib / python2. 7 / dist-packages / requests dans mon répertoire plugin dans le répertoire sublime text packages. Mais après cela, il dit qu'il ne peut pas trouver le " urllib3 module.

Existe-t-il un meilleur moyen d'importer le module requests afin que je n'aie pas à copier tous les fichiers dans mon répertoire de plugin ?

Le code actuel que j'utilise est le suivant:

MyPlugin.py

import sublime
import sublime_plugin
import SEAPI
...

SEAPI.py

import requests
try:
    import simplejson as json
except:
    import json
from time import time, sleep
...

Modifier: La réponse sélectionnée est correcte et corrige ma question principale, mais un problème différent existe avec l'utilisation de la version actuelle de 'Requests' avec l'interpréteur sublime text 2 intégré. Python de ST2 manque divers modules qui existent dans Python 2.7 régulier (comme'fileio').

Je l'ai résolu en utilisant le module' Requests ' d'ici: https://github.com/bgreenlee/sublime-github

Et j'ai dû éditer le 'urllib3/response.py' fichier à ceci:

try:
    from cStringIO import StringIO as BytesIO
except ImportError:
    pass  # _fileio doesn't seem to exist in ST's python in Linux, but we don't need it
28
demandé sur Community 2013-03-03 03:12:59

2 réponses

Vous devez regrouper la distribution complète des requêtes avec votre paquet Python, puis Modifier sys.path de Python (où il recherche des modules)pour pointer vers un dossier contenant le dossier requests.

  • Téléchargez la bibliothèque de requêtes à partir D'un PyPi et extrayez-la manuellement sous votre dossier de plugin

  • Avant d'importer des requêtes dans votre plugin, ajoutez le dossier corrcet à sys.chemin pour pointer un dossier où il peut trouver des requêtes import

Le le code (non testé) devrait ressembler à quelque chose comme ceci:

  import sys 
  import os

  # request-dists is the folder in our plugin
  sys.path.append(os.path.join(os.path.dirname(__file__), "requests-dist"))

  import requests

Cela suppose également que requests setup.py ne fait pas de hacks lorsque vous installez le module en utilisant easy_install ou pip.

Vous pouvez également importer requests zip directement car Python prend en charge l'importation à partir de fichiers ZIP, en supposant que les requêtes sont distribuées de manière compatible. Exemple (avancé):

Https://github.com/miohtama/ztanesh/blob/master/zsh-scripts/python-lib/zipimporter.py

Plus sur sys.chemin de truc (2004)

Http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html

21
répondu Mikko Ohtamaa 2013-03-03 00:08:17

La réponse de Mikko est bonne, mais j'ai peut-être trouvé un moyen un peu plus facile:

import MyAwesomePlugin.requests

"MyAwesomePlugin" étant le nom de votre plugin, bien sûr.

5
répondu zakdances 2013-08-26 11:02:07