2015-12-25 2 views
1

я установил Python-RSA для использования алгоритма RSA в моем питона проекте, но когда я хочу использовать его у меня есть эта ошибка:функция ошибок для модуля питон-RSA

run error

import rsa 
(public_key, private_key) = rsa.newkeys(1024, accurate=True, poolsize=8) 

выше код из official Doc

я проверить модуль файлов для newkeys() функции и эта функция существует

module's files

def newkeys(nbits, accurate=True, poolsize=1): 
    if nbits < 16: 
     raise ValueError('Key too small') 
    if poolsize < 1: 
     raise ValueError('Pool size (%i) should be >= 1' % poolsize) 
    if poolsize > 1: 
     from rsa import parallel 
     import functools 
     getprime_func = functools.partial(parallel.getprime, poolsize=poolsize) 
    else: getprime_func = rsa.prime.getprime 
    (p, q, e, d) = gen_keys(nbits, getprime_func) 
    n = p * q 
    return (PublicKey(n, e), PrivateKey(n, e, d, p, q)) 
__all__ = ['PublicKey', 'PrivateKey', 'newkeys'] 
if __name__ == '__main__': 
    import doctest 
    try: 
     for count in range(100): 
      (failures, tests) = doctest.testmod() 
      if failures: 
       break 
      if (count and count % 10 == 0) or count == 1: 
       print('%i times' % count) 
    except KeyboardInterrupt: 
     print('Aborted') 
    else: 
     print('Doctests done') 

что здесь не так?

+0

Что такое вывод 'python -c 'import rsa; print (dir (rsa)); print (rsa .__ file __)" '? –

+0

та же ошибка, что и выше @GregoryNisbet ..... я сейчас редактирую –

+0

Вы установили модуль python-rsa через 'pip' или копируете файл? –

ответ

2

Итак, как оказалось, вы столкнулись с довольно странным свойством Python, а именно, что вы можете импортировать модуль текущего файла. Файл rsa.py был затенять rsa каталог (который содержит __init__.py файл, поэтому он может быть загружен как модуль.)

Попробуйте сделать файл foo.py со следующим содержимым

import foo 

def bar(): 
    return 5 

print dir(foo) 

Это будет печатать что-то вроде

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo'] 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar', 'foo'] 

при запуске python foo.py

Он пр ints структуру каталога дважды (один раз при загрузке модуля) и один раз, когда файл оценивается.

Это не приводит к бесконечному циклу, потому что Python кэширует модули, которые он уже загрузил.

+0

да .... спасибо за ваш ответ –

0

благодаря Грегори:

1- первая вещь, * .py имя файла и импортирована имя модуля не может быть такой же .... если мы будем использовать то же имя для них проблемы, как у меня будет. IDLE не может распознать способ записи файла

2- в этом модуле есть серьезная проблема. когда я хочу использовать poolize = x параметр newkeys() Функция У меня есть много ошибок и большой цикл в моей программе. это связано с тем, что многопроцессорность этого модуля не работает в Windows 10. Эта проблема может быть вызвана Windows или модуль.

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