2010-09-25 24 views
3

Je suis nouveau sur Python. Je suis actuellement sur Py3k (Win).Comment installer un fichier de recette Python (.py)?

Je rencontre des problèmes pour installer un fichier .py. Fondamentalement, je veux utiliser les recettes fournies au bas de la page this. Donc, je veux les mettre à l'intérieur d'un .py et import eux en de mes codes source. J'ai donc copié toutes les recettes dans un fichier recipes.py et les ai copiées à C:\Python3k\Lib\site-packages.

Maintenant, le import fonctionne très bien, mais quand je tente d'appeler une fonction (par exemple. take) de celui-ci, je suis un global name 'islice' is not defined ... Alors je me suis, j'ajouter une importation à recipes.pyitertools

Je reçois toujours la même erreur? Dois-je changer toutes les instances en itertools.<funcname>? comment puis-je faire l'importation globale? Est-ce un nouveau changement de Py3k? Y a-t-il quelque chose qui me manque?

Merci d'avance, :)

+0

avez-vous utilisé 'partir itertools importer *' 'dans recipes.py'? – jcubic

+0

@jcubic, 'nom global 'itertools' n'est pas défini 'pour' recipes.py'? : - \ Odd! – st0le

+0

Vous devriez demander, comment installer le module python (je suis sûr qu'il y a beaucoup d'informations). – alxx

Répondre

7

Il existe deux problèmes étroitement liés.

Tout d'abord, au sein de recipes.py, vous devez avoir accès à tous les outils.

À tout le moins, cela signifie que vous avez besoin

import itertools 

en haut. Mais dans ce cas, vous devrez qualifier toutes les fonctions d'itertools comme itertools.<funcname>, comme vous le dites. (Vous pouvez également utiliser import itertools as it puis it.<funcname>.)

Deuxièmement, vous pourriez faire

from itertools import islice, count, chain 

mais vous devez mettre toutes les fonctions nécessaires dans la liste.

Enfin, le moins recommandé, mais probablement plus facile, est de faire

from itertools import * 

Ceci est dangereux car il pollue l'espace de noms avec tout de itertools, qui est considéré comme mauvais et sans contrôle, mais dans ce cas Ce n'est probablement pas terrible.

Deuxième, vous avez un problème similaire dans l'ensemble de votre code qui utilise recipes.py; vous devrez qualifier ou importer explicitement tout. Alors, que ce soit

import recipes 
recipes.take(...) 

ou

from recipes import take 
take(...) 
+1

+1 mais honnêtement, je ne mentionnerais même pas 'from foo import *'. regardez le commentaire de jcubic sur la question pour la preuve que nous ne sommes pas tous adultes. – aaronasterling

+0

A travaillé! Merci beaucoup! :) – st0le

+0

Je sais que 'from blah import *' est mal vu, mais c'est strictement pour résoudre le projet euler et d'autres choses ... donc ça n'a pas vraiment d'importance pour moi, dans ce cas de toute façon ... :) – st0le