我将pipenv用于一个小项目。该代码看起来可能很有用,我想通过pypi分发它。我在 pipenv 网页或其 github repo 上找不到有关如何完成此操作的任何指导。
我可以将 my 中的依赖项Pipfile.lock
放入a的install_requires
部分setup.py
,但我找不到自动执行此操作的工具,并且手动操作不会是 DRY。
有人有更好的建议吗?
支持外部 git 依赖和版本。我已经更新了一点 winni2kk 代码。
import os
from setuptools import setup, find_packages
import json
def get_requirements_from_pipfile_lock(pipfile_lock=None):
if pipfile_lock is None:
pipfile_lock = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Pipfile.lock')
lock_data = json.load(open(pipfile_lock))
retval = []
for package_name, package_data in lock_data.get('default', {}).items():
if package_data.get('file'):
package_ref = f'{package_name} @ {package_data["file"]}'
else:
package_ref = f'{package_name}{package_data["version"]}'
retval.append(package_ref)
return retval
packages = find_packages('.', exclude=['*.test', '*.test.*'])
pipfile_lock_requirements = get_requirements_from_pipfile_lock()
setup(
name='my_package',
version='0.0.1',
packages=packages,
license='MIT',
long_description=open('README.md').read(),
install_requires=pipfile_lock_requirements,
python_requires=">=3.5",
)
重要提示:在 MANIFEST.in 中包含 Pipfile.lock,例如:
包括 Pipfile.lock
这似乎对我有用:
import os
from setuptools import setup, find_packages
import json
def get_requirements_from_pipfile_lock(pipfile_lock=None):
if pipfile_lock is None:
pipfile_lock = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Pipfile.lock')
lock_data = json.load(open(pipfile_lock))
return [package_name for package_name in lock_data.get('default', {}).keys()]
packages = find_packages('.', exclude=['*.test', '*.test.*'])
pipfile_lock_requirements = get_requirements_from_pipfile_lock()
setup(
name='my_package',
version='0.0.1',
packages=packages,
license='MIT',
long_description=open('README.md').read(),
install_requires=pipfile_lock_requirements,
python_requires=">=3.5",
)