PyBluez이 macOS에 설치되는 방식을 개선하려고합니다. Here은 변경 전의 setup.py 코드입니다.package_data를 사용하여 빌드 된 프레임 워크를 Python 패키지로 복사
즉, macOS에서는 lightblue
이라는 추가 패키지가 설치되며 이는 LightAquaBlue.framework라는 프레임 워크에 따라 다릅니다. 오늘, xcodebuild를 호출하여 프레임 워크를 만들고 /Library/Frameworks
에 설치했지만, 프레임 워크를 Python 패키지 내에 임베드하도록 변경하려고합니다.
는 여기에 내가 무슨 짓을했는지의 :
packages.append('lightblue')
package_dir['lightblue'] = 'osx'
install_requires += ['pyobjc-core>=3.1', 'pyobjc-framework-Cocoa>=3.1']
# Add the LightAquaBlue framework to the package data as an 'eager resource'
# so that we can extract the whole framework at runtime
package_data['lightblue'] = [ 'LightAquaBlue.framework' ]
eager_resources.append('LightAquaBlue.framework')
# FIXME: This is inelegant, how can we cover the cases?
if 'install' in sys.argv or 'bdist' in sys.argv or 'bdist_egg' in sys.argv:
# Build the framework into osx/
import subprocess
subprocess.check_call([
'xcodebuild', 'install',
'-project', 'osx/LightAquaBlue/LightAquaBlue.xcodeproj',
'-scheme', 'LightAquaBlue',
'DSTROOT=' + os.path.join(os.getcwd(), 'osx'),
'INSTALL_PATH=/',
'DEPLOYMENT_LOCATION=YES',
])
이합니다 (lightblue
패키지의 디렉토리입니다) osx/
내부 LightAquaBlue.framework를 구축하고 package_data
로 setuptools에 전달합니다. 내가 pip install --upgrade -v ./pybluez/
실행할 때 그러나 LightAquaBlue.framework 복사 하지은 다음과 같습니다
creating build/lib/lightblue
copying osx/_bluetoothsockets.py -> build/lib/lightblue
copying osx/_LightAquaBlue.py -> build/lib/lightblue
copying osx/_obexcommon.py -> build/lib/lightblue
copying osx/_IOBluetoothUI.py -> build/lib/lightblue
copying osx/__init__.py -> build/lib/lightblue
copying osx/_IOBluetooth.py -> build/lib/lightblue
copying osx/_obex.py -> build/lib/lightblue
copying osx/_lightblue.py -> build/lib/lightblue
copying osx/obex.py -> build/lib/lightblue
copying osx/_macutil.py -> build/lib/lightblue
copying osx/_lightbluecommon.py -> build/lib/lightblue
내가 osx/
내부 더미 파일을 생성하고, package_data
에 추가있는 setup.py가있는 경우, 그 가 복사됩니다 않습니다. 이것은 나에게 경로를 통한 혼란이 없음을 시사합니다.
os.system('ls osx/')
을 추가하면 LightAquaBlue.framework가 더미 파일과 동일한 위치에 있음을 보여줍니다.
LightAquaBlue
--> LightAquaBlue.framework
DUMMY_FILE_THAT_WORKS
_IOBluetooth.py
_IOBluetoothUI.py
_LightAquaBlue.py
__init__.py
_bluetoothsockets.py
_lightblue.py
_lightbluecommon.py
_macutil.py
_obex.py
_obexcommon.py
obex.py
왜 프레임 워크가 제대로 복사되지 않습니까?