<질문>
기본적으로 다음과 같은 파이썬 파일이있을 때 :
python-code.py
그리고 사용 :
import (python-code)
인터프리터가 구문 오류를 제공합니다.
그것을 고치는 방법에 대한 아이디어가 있습니까? 파이썬 파일 이름에서 대시가 불법입니까?
<답변1>
당신은 확인해야합니다PEP 8, Python 코드 용 스타일 가이드 :
패키지 및 모듈 이름 모듈에는 모두 소문자로 된 짧은 이름이 있어야합니다. 가독성이 향상되면 모듈 이름에 밑줄을 사용할 수 있습니다. Python 패키지에는 밑줄을 사용하지 않는 것이 좋지만 모두 소문자로 된 짧은 이름이 있어야합니다. 모듈 이름은 파일 이름에 매핑되고 일부 파일 시스템은 대소 문자를 구분하지 않고 긴 이름을 자르기 때문에 모듈 이름을 상당히 짧게 선택하는 것이 중요합니다. 이것은 Unix에서는 문제가되지 않지만 문제가 될 수 있습니다. 코드가 이전 Mac 또는 Windows 버전 또는 DOS로 전송 될 때 문제가 발생합니다.
즉, 파일 이름을 바꿉니다.
<답변2>
코드에서 주목해야 할 또 다른 사항은 가져 오기가 함수가 아니라는 것입니다. 그래서import(python-code)
해야한다import python-code
일부는 이미 언급했듯이 의도 한 것이 아니라 "파이썬 마이너스 코드 가져 오기"로 해석됩니다. 이름에 대시가있는 파일을 실제로 가져와야하는 경우 다음을 수행 할 수 있습니다.
python_code = __import__('python-code')
그러나 위에서도 언급했듯이 이것은 실제로 권장되지 않습니다. 제어 할 수있는 파일 이름을 변경해야합니다.
<답변3>
TLDR
대시는아니불법이지만 다음 세 가지 이유로 사용해서는 안됩니다.
- 대시가있는 파일을 가져 오려면 특수 구문이 필요합니다.
- 아무도 대시가있는 모듈 이름을 기대하지 않습니다.
- 의 권장 사항에 위배됩니다.Python Style Guide
대시가있는 파일 이름을 가져와야하는 경우 특수 구문은 다음과 같습니다.
module_name = __import__('module-name')
특별한 구문이 필요한 이유가 궁금하십니까?
특수 구문의 이유는import somename
식별자가있는 모듈 객체를 만들고 있습니다.somename
(따라서 나중에 예를 들어 사용할 수 있습니다.somename.funcname
). 물론이야module-name
유효한 식별자가 아니므로 유효한 식별자를 제공하는 특수 구문입니다.
module-name이 유효한 식별자가 아닌 이유를 알지 못합니까?
걱정하지 마세요. 나도 마찬가지입니다. 여기에 도움이되는 팁이 있습니다.이 파이썬 라인을보세요 :x=var1-var2
. 할당의 오른쪽에 빼기가 표시되거나 대시가있는 변수 이름이 표시됩니까?
추신
한 곳에서 다른 모든 답변에서 가장 관련성이 높은 정보로 간주되는 것을 제외하고는 내 답변에 원본이 없습니다.
<답변4>
문제는python-code
식별자가 아닙니다. 파서는 이것을 다음과 같이 봅니다.python
마이너스code
. 물론 이것은 당신이 요구하는 것을하지 않을 것입니다. 유효한 파이썬 식별자이기도 한 파일 이름을 사용해야합니다. 교체하십시오-
밑줄과 함께.
<답변5>
아마도 일부를 통해 가져올 수 있습니다.__import__
해킹,하지만 아직 방법을 모른다면하지 말아야합니다. Python 모듈 이름은 유효한 변수 이름 ( "식별자")이어야합니다. 즉, 모듈이있는 경우foo_bar
, Python (print foo_bar
). 당신은 이상한 이름으로 그렇게 할 수 없을 것입니다 (print foo-bar
-> 구문 오류).
<답변6>
Python 3에서 사용import_module:
from importlib import import_module
python_code = import_module('python-code')
더 일반적으로,
import_module('package.subpackage.module')
<답변7>
적절한 파일 이름 지정이 최선의 방법이지만python-code
우리의 통제하에 있지 않습니다.__import__
다른 작성자의 코드를 복사하거나 이름을 바꾸거나 엉망으로 만드는 것보다 낫습니다. 그러나 시도했지만 파일 이름을 변경하지 않으면 작동하지 않았습니다..py
신장. 보고 나서the doc설명을 얻는 방법을.py
, 나는 이것으로 끝났습니다.
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
새 파일을 만들었습니다.python-codec
첫 번째 실행에서.
'개발 > Python' 카테고리의 다른 글
[파이썬] PyQt connect () 구문이 왜 그렇게 장황합니까? (0) | 2021.01.11 |
---|---|
[파이썬] PyQt에서 QThread가있는 백그라운드 스레드 (0) | 2021.01.10 |
파이썬에서 mod b를 계산하는 방법은 무엇입니까? (0) | 2021.01.10 |
[파이썬] pip를 사용하여 SciPy 및 NumPy 설치 (0) | 2021.01.10 |