NumPy, SciPy, MatPlotLib와 같은 모듈을 사용하는 코드가 포함 된 파이썬 파일 (.py
~ .pyc
/.pyo
)을 컴파일한다고 가정합니다. 다른 구성 (예 : 클라이언트)에서 모듈을 실행하면 모듈 버전이 동일해야합니까? 아니면 호환되는 버전 범위에 있어야합니까?모듈을 사용하여 컴파일 된 파이썬 코드의 버전 호환성
2
A
답변
2
.pyc
및 .pyo
파일은 단지 캐시 된 바이트 코드입니다. 파이썬의 임포트 기계는 문자열을 중심으로 만들어지며, 이로 인해 가져 오기를 실행하는 코드가 가져온 라이브러리와 분리됩니다.
이러한 파일은 소스 코드 자체보다 가져 오는 라이브러리 버전에 더 이상 종속되지 않습니다. 소스 코드가 다양한 버전의 라이브러리에서 작동하는 경우 컴파일 된 바이트 코드도 함께 작동합니다.
항상 파이썬이 생성하는 바이트 코드를 dis
module으로 볼 수 있습니다. 직선 업 import
문이된다 :
>>> compile('import numpy as np', '', 'single').co_names
('numpy', 'np')
그렇지 않은 :
>>> import dis
>>> dis.dis(compile('import numpy as np', '', 'single'))
1 0 LOAD_CONST 0 (0)
2 LOAD_CONST 1 (None)
4 IMPORT_NAME 0 (numpy)
6 STORE_NAME 1 (np)
8 LOAD_CONST 1 (None)
10 RETURN_VALUE
는 IMPORT_NAME
opcode은 (너무 캐시에 저장) 코드 객체에 부착 된 co_names
구조에서 이름을 따 여기서 numpy
모듈은 동적으로로드되는 라이브러리의 큰 부분으로 구성됩니다. 이름을numpy
으로 바꾸면 대신 가져올 수 있습니다. 모듈은 컴파일 시간이 아니라 런타임에로드됩니다.
4
컴파일 된 바이트 코드 인 경우에도 모듈의 이름은 여전히 문자열입니다. 모듈의 인터페이스가 호환되는 한, 코드는 여전히 다른 모듈 버전에서 작동합니다.
관련 문제
- 1. 컴파일 된 파이썬 모듈을 메모리에서로드하는 방법은 무엇입니까?
- 2. 다른 NDK로 컴파일 된 C/C++ 코드의 하위 호환성?
- 3. 자바 버전 호환성 확인
- 4. 컴파일 된 코드에 대한 Java (JRE) 버전 호환성
- 5. R 코드의 하위 호환성
- 6. 버전 호환성
- 7. 컴파일 된 gcc와 tcc 구조체의 호환성
- 8. 컴파일 - 호환성
- 9. JNI 라이브러리의 Java 버전 호환성
- 10. iphone 버전 호환성 스캐너
- 11. 컴파일 된 코드의 '()'것은 무엇입니까?
- 12. 스칼라/스파크 버전 호환성
- 13. 왜 팬텀 모듈을 사용하여 Node.js를이 코드의 원인은
- 14. 컴파일 된 코드와 네이티브 컴파일 된 코드의 차이점
- 15. Mule 버전 호환성 문제
- 16. /openmp로 컴파일 된 모듈을 가져올 수 없습니까?
- 17. 자바 버전 호환성 문제
- 18. .NET 버전 호환성 문제
- 19. Lucene - Solr 버전 호환성
- 20. C# 버전 호환성
- 21. 호환성 - Selenium webdriver가 포함 된 브라우저 버전
- 22. 컴파일 된 파이썬 CGI
- 23. 파이썬 패키지 역 호환성
- 24. 이것이 파이썬 코드의 올바른 해석입니까? 파이썬 코드의
- 25. 응용 프로그램의 버전 호환성
- 26. JRE/Windows 버전 호환성
- 27. 3.7과 카산드라 버전 호환성?
- 28. ElasticSearch와 Kibana의 버전 호환성
- 29. Silverlight 3 버전 호환성
- 30. com.esotericsoftware.kryo 교차 버전 호환성
그러나 이것은 기본 Python 런타임의 버전을 변경하는 것으로 확장되지 않습니다. 파이썬 버전이 생성 된 파일 이름에 포함되어있을뿐만 아니라 파일 자체 내에 버전 호환성 마커가 있습니다 (참고 : 원래의 덧글은 질문을 오독하는 것을 기반으로했습니다. – ncoghlan
죄송합니다. 질문을 잘못 읽었습니다. 다시 파이썬 버전을 변경하는 것도 고려했습니다. (다시 컴파일해야 할 필요가있는 부분입니다) – ncoghlan