2015-01-20 3 views
1

Я написал модуль Python, который представляет собой всего лишь два метода: помощь и проверка. Check просто берет имя файла строки и что-то делает с ним. Когда я импортирую модуль, в нем нет методов. Только __name__ и тому подобное, но ни проверка, ни помощь не появляются в каталоге.Пакет модулей Python без методов

Я просто импортирую файл. lyricCheck.py

Вот мой код в lyricCheck.py:

#!/usr/bin/python 
#python lyric checker 
#Jim Boulter 
#January 19, 2015 
#Copyright 2015 

import sys 
import urllib2 
import fileinput 
from decimal import * 
from re import * 
from pygoogle import pygoogle 

def help(): 
    print 'usage: python check.py filename.txt\n' 
    print 'input line structure: artist name; song title\n' 

def check(filename): 
    if(str(filename).lower == "help" or str(filename).lower == "-h"): 
     help() 
     return 
    #do lots of other stuff 
+1

Вы импортировали, выполнив 'import lyricCheck'? если да, попробовали ли вы 'dir (lyricCheck)'? – zehnpaard

+0

Как вы импортируете его и как вы пытаетесь получить доступ к методам? Несвязанный: вы забыли называть функцию 'lower':' str (filename) .lower() '. –

+0

Я импортирую с импортом lyricCheck, и когда я использую dir (lyricCheck), я получаю это: '['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path __']' – jboulter11

ответ

2

Если вы создаете ваш пакет, как это, и я считаю, что вы, вы должны импортировать модуль из пакета:

~/tmp$ mkdir lyricCheck 
~/tmp$ cd lyricCheck/ 
~/tmp/lyricCheck$ touch __init__.py 
~/tmp/lyricCheck$ cat > lyricCheck.py 
#!/usr/bin/python 
#python lyric checker 
#Jim Boulter 
#January 19, 2015 
#Copyright 2015 

import sys 
import urllib2 
import fileinput 
from decimal import * 
from re import * 
from pygoogle import pygoogle 

def help(): 
    print 'usage: python check.py filename.txt\n' 
    print 'input line structure: artist name; song title\n' 

def check(filename): 
    if(str(filename).lower == "help" or str(filename).lower == "-h"): 
     help() 
     return 
    #do lots of other stuff 
~/tmp/lyricCheck$ cd .. 
~/tmp$ python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import lyricCheck 
>>> dir(lyricCheck) 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__'] 

Вот мой выигрыш, и это должно было бы работать, если бы у меня был pygoogle, так это то, как я знаю, что я нашел проблему:

>>> from lyricCheck import lyricCheck 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "lyricCheck/lyricCheck.py", line 12, in <module> 
    from pygoogle import pygoogle 
ImportError: No module named pygoogle 

Вы можете поместить это в файл __init__.py импортировать функции из нижнего модуля уровня и сделать их доступными прямо на уровне пакета:

from lyricCheck import help, check 

Также обратите внимание, когда вы делаете это:

from decimal import * 
from re import * 

Вы даете все имена в этих модулях в пространство имен вашего модуля. Обычно считается, что лучше объявить их индивидуально.

+0

Я был слишком большой папкой, я думаю, спасибо! – jboulter11

+1

Это была моя следующая проблема. Ты читатель разума. Проведите остаток ночи. – jboulter11

+0

@ jboulter11 Рад помочь, но, пожалуйста, не уходите от всего моего материала, хотя, после стольких, SO будет думать, что я управляю вашей учетной записью. Но не стесняйтесь смотреть на мой материал здесь, это неплохо, или я думаю, и если вы считаете, что материал достоин в контексте, дайте ему подтолкнуть вверх. :) –

Смежные вопросы