У меня было много проблем с PyCharm, которые не распознавали функции в библиотеках должным образом, поэтому я решил изучить исходный код некоторых функций, которые PyCharm неправильно распознает. Например, PyCharm не распознает pickle.load()
правильно; он считает, что pickle.load()
не принимает никаких аргументов, когда на самом деле он принимает один аргумент. Я задал этот вопрос здесь. Поэтому я написал следующий короткий тестовый код.
import pickle
r = range(10)
f = open("../temp/pickling_example.pkl", "wb")
pickle.dump(r, f)
f.close()
f = open("../temp/pickling_example.pkl", "rb")
pickle.load(f)
print(r)
Я нажал Ctrl+B
на pickle.load(f)
, предпоследнюю строку. Я надеялся, что это приведет меня к исходному файлу, содержащему определение pickle.load()
, но вместо этого он привел меня в файл в месте C:\Users\ray\.PyCharm30\system\python_stubs\-1442825926\_pickle.py
. Этот файл содержит следующий реферат (см. Снимок экрана ниже).
Здесь вы можете увидеть источник проблемы PyCharm, неправильно распознающий подпись pickle.load()
; подпись pickle.load()
в соответствии с этим файлом не имеет аргументов.
Может кто-нибудь объяснить, почему меня сюда привезли, и что это за файл, и что такое папка python_stubs
(точнее, C:\Users\ray\.PyCharm30\system\python_stubs\
)?
Мое предположение следующее. Я был доставлен в этот файл в этом месте, потому что PyCharm не может найти фактический исходный код, где pickle.load()
был определен, на моем компьютере. В этих ситуациях PyCharm только генерирует фиктивный файл с только объявлениями (или только сигнатурами) используемых функций, в этом случае он pickle.load()
. Этот файл находится там, где я был доставлен, когда я нажал Ctrl+B
на pickle.load()
. Цель этого файла сводится исключительно к тому, что проверки PyCharm работают правильно и могут обеспечивать автозаполнение, а PyCharm помещает все эти файлы в каталог python_stubs
. Фактическое определение функции pickle.load()
находится в файле pyc
или pyd
где-то в моем каталоге C:\Python34\
, и у меня нет фактического файла py
, содержащего определение pickle.load()
, потому что, когда Я установил Python, я не установил исходные коды.
Вопросы:
(1) Насколько я понимаю, правильно? Не могли бы вы предоставить и более правильные и точные
(2) Что я могу сделать, чтобы PyCharm не ошибочно распознавал или не распознавал функции библиотеки? Должен ли я удостовериться, что я всегда устанавливаю исходные коды Python и всех сторонних пакетов, чтобы гарантировать, что PyCharm может делать свои проверки должным образом?
(3) Если бы я был прав в этом, PyCharm генерирует эти файлы, как PyCharm угадывает сигнатуры функций?