1

我将pipenv用于一个小项目。该代码看起来可能很有用,我想通过pypi分发它。我在 pipenv 网页或其 github repo 上找不到有关如何完成此操作的任何指导。

我可以将 my 中的依赖项Pipfile.lock放入a的install_requires部分setup.py,但我找不到自动执行此操作的工具,并且手动操作不会是 DRY。

有人有更好的建议吗?

4

2 回答 2

1

支持外部 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

于 2020-01-23T07:53:02.630 回答
0

这似乎对我有用:

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",
)
于 2017-10-18T13:15:29.470 回答