내 패키지의 버전 번호가 필요로하는 모든 것을 참조 할 수있는 단일 장소에 있어야합니다.`src /`디렉토리의 python 패키지에서 프로젝트 루트의 텍스트 파일에 액세스하는 방법
Single Sourcing the Package Version에 대한이 파이썬 가이드에서 몇 가지 제안 사항을 발견했으며 # 4를 시도하여 내 프로젝트 루트에 VERSION
이라는 간단한 텍스트 파일로 저장하기로 결정했습니다. 여기
.
├── MANIFEST.in
├── README.md
├── setup.py
├── VERSION
├── src/
│ └── fluidspaces/
│ ├── __init__.py
│ ├── __main__.py
│ ├── i3_commands.py
│ ├── rofi_commands.py
│ ├── workspace.py
│ └── workspaces.py
└── tests/
├── test_workspace.py
└── test_workspaces.py
VERSION
이후 및 setup.py
어떤 나는 그걸로 원해.
그러나 VERSION
과 src/fluidspaces/__main__.py
은 형제가 아니며 기본 모듈은 프로젝트 루트의 경로를 알지 못하므로이 방법을 사용할 수 없습니다.
가이드
이 알림을했다 :경고 :이 방법을 사용하면 VERSION 파일 (예를 들어 추가하여 MANIFEST.in에 버전을 포함) 모든 소스 및 바이너리 배포판에 포함되어 있는지 확인해야합니다. 대신 프로젝트 루트 경로를 필요로하는 패키지 모듈의 버전 파일을 쉽게 액세스 할 수 있도록 빌드시에 패키지로 복사 할 수 - -하지만 난 매니페스트 및 버전 파일 라인은 여전히 아무튼 덧붙였다 합리적인 듯
어디서나 빌드에 나타납니다.
빌드하려면 프로젝트 루트와 virtualenv 내부에서 pip install -U .
을 실행하고 있습니다. 다음은 결과로 <virtualenv>/lib/python3.6/site-packages
에서 만든받을 폴더는 다음과 같습니다
fluidspaces/
├── i3_commands.py
├── __init__.py
├── __main__.py
├── __pycache__/ # contents snipped
├── rofi_commands.py
├── workspace.py
└── workspaces.py
fluidspaces-0.1.0-py3.6.egg-info/
├── dependency_links.txt
├── entry_points.txt
├── installed-files.txt
├── PKG-INFO
├── SOURCES.txt
└── top_level.txt
더 :
MANIFEST.in :
include README.md
include VERSION
graft src
prune tests
setup.py :
#!/usr/bin/env python3
from setuptools import setup, find_packages
def readme():
'''Get long description from readme file'''
with open('README.md') as f:
return f.read()
def version():
'''Get version from version file'''
with open('VERSION') as f:
return f.read().strip()
setup(
name='fluidspaces',
version=version(),
description='Navigate i3wm named containers',
long_description=readme(),
author='Peter Henry',
author_email='[email protected]',
url='https://github.com/mosbasik/fluidspaces',
license='MIT',
classifiers=[
'Development Status :: 3 - Alpha',
'Programming Language :: Python :: 3.6',
],
packages=find_packages('src'),
include_package_data=True,
package_dir={'': 'src'},
package_data={'': ['VERSION']},
setup_requires=[
'pytest-runner',
],
tests_require=[
'pytest',
],
entry_points={
'console_scripts': [
'fluidspaces = fluidspaces.__main__:main',
],
},
python_requires='~=3.6',
)
이 질문은입니다. 그 때문에 pkg_resources
라이브러리가 제 문제에 대한 해답이 될 수 있다고 생각하지만, 제 상황에서는 그것을 사용하는 방법을 알 수 없었습니다.
내가 발견 한 대부분의 예제는 src/
디렉토리가 아닌 프로젝트 루트에 직접 파이썬 패키지가 있기 때문에 문제가 발생했습니다.나는 때문에이 같은 권고 src/
디렉토리를 사용하고 있습니다 : 내가 찾은
- PyTest: Good Practices: Tests Outside Application Code
- Ionel Cristian Mărieș - Packaging a Python Library
- Hynek Schlawack - Testing and Packaging
다른 손잡이를 약간 비틀 시도하면 package_data
, include_package_data
있습니다 , setup()
에 대해서는 data_files
kwargs입니다. 그들이 얼마나 관련이 있는지 모릅니다. 매니 페스트에서 선언 한 것과 이것들로 선언 된 것 사이에는 약간의 상호 작용이있는 것처럼 보입니다.하지만 자세한 것은 확실하지 않습니다.