이전 Linux 서버에 최신 버전의 소프트웨어를 설치하려고 할 때(루트 액세스 권한이 없음) 가끔 XXX-dev 또는 XXX-devel 패키지가 필요할 때가 있습니다. 여기서 XXX는 라이브러리 이름입니다. 예를 들어 CentOS에 Python 3.7.4를 설치하려면 libffi-devel이 사전 설치되어 있어야 합니다. 루트 권한 으로 yum
또는 루트 권한으로 apt
XXX-dev를 설치합니다 . XXX와 XXX-dev의 소스코드를 배포하는 것은 일반 사용자들이 다양한 소프트웨어를 쉽게 설치할 수 있도록 하는 좋은 방법인 것 같습니다.
그렇다면 제 질문은 왜 XXX-dev의 소스코드가 배포되지 않는 걸까요? 타당한 이유가 있나요?
답변1
XXX-dev의 소스코드는 왜 공개되지 않나요?
Python용 ffi 코드를 컴파일할 때 사용하는 모든 라이브러리를 컴파일할 필요가 없거나 컴파일하고 싶지 않기 때문입니다. 당신은 사용하고 싶어공유 객체 파일, (Windows에서는 DLL) 원하는 라이브러리에 동적으로 연결됩니다. 실제로 다른 답변에서 알 수 있듯이 소스 코드를 사용할 수 있습니다. 그러나 Python용 ffi를 빌드하는 데는 이것이 필요하지 않습니다. 당신은해야합니다머리글그리고공유 객체 파일.
yum
루트 권한 으로 또는 루트 권한으로apt
XXX-dev를 설치합니다 .
소스 코드를 설치하지 않는다는 것이 아닙니다. 이는 시스템 수준에서 작동하기 때문입니다. 소스코드를 설치할 필요는 없지만하다다음 조건이 필요합니다.
XXX
, 이것컴파일된라이브러리 공유 객체 파일XXX-dev
,소스 코드머리글코드에서 사용할 수 있지만 동적으로 연결될 수 있도록 라이브러리에서 함수를 정의합니다.
루트가 소유한 위치에 있을 필요는 없지만하다컴파일러/링커/빌드 도구 체인이 찾을 수 있는 위치에 있어야 합니다. 이는 소스에서 빌드하든 안 하든 마찬가지입니다. 그러나 빌드 프로세스의 모든 작은 부분을 올바르게 수행하는 것은 쉬운 작업이 아니므로 배포판이 이를 수행합니다.
안타깝게도 이는 C에서 많이 차용했지만 이러한 라이브러리를 표준 빌드 프로세스의 일부로 제공하기 위해 운영 체제에 의존하는 Python의 일반적인 시나리오입니다. 아마도 Python은 사용자가 가지고 있는 빌드 구성 요소를 사용하도록 설득될 수 있습니다. 나는 무엇을 해야할지 모르겠습니다. 이를 대상으로 삼지 말고 "라이브러리를 설치해야 하지만 권한이 없습니다" 문제를 해결하는 방법을 찾으세요.
- 컨테이너 기술을 사용하면 프로세스에서 다양한 사용자 공간 파일 시스템을 사용할 수 있지만 관리자가 해당 액세스 권한을 부여하지 않을 수도 있습니다.
- 관리자에게 필요한 모든 패키지를 설치하도록 요청하세요.
- 필수 패키지를 설치할 수 있는 다른 시스템을 사용하여 개발
- 시스템 라이브러리와 보다 강력한 관계를 가진 언어를 사용하십시오(Golang은 일반적으로 라이브러리 때문에 이 문제가 없습니다).예일반적으로 Golang 소스 코드로 배포되며 전체 빌드 프로세스는 더 현대적이며 실행하는 데 루트 권한이 필요하지 않습니다.)
답변2
소스 코드 -dev
및 -devel
패키지예탈중앙화되어 해당 소스 패키지의 소스 코드에 포함됩니다. libffi-devel
CentOS 의 경우 다음을 참조하세요.RPM libffi
Git 저장소및 해당 소스 아카이브업스트림 libffi
배포 사이트.