首页 > 解决方案 > Setup.py 安装需要本地包

问题描述

我正在寻找my-package使用setuptools. my-package具有本地依赖性,utils. 我的文件结构如下:

parent/
    my-package/
        my-package/
        setup.py
    utils/
        utils/
        setup.py

我正在寻找使用以下内容安装本地依赖项:

from setuptools import setup
import os

setup(
    name='my-package',
    version='1.0',
    packages=['my-package'],
    install_requires=[
        # location to your my-package project directory
        "file:\\" + os.path.join(os.path.dirname(os.getcwd()), 'utils#egg=utils-1.0')
    ]
)

不幸的是,出现以下错误:

    ERROR: Command errored out with exit status 1:
     command: /path/to/python/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/home/my-package/setup.py'"'"'; __file__='"'"'/home/my-package/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info
         cwd: /home/my-package/
    Complete output (1 lines):
    error in my-package setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid requirement, parse error at "'://home/'"
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

我在这里尝试了解决方案,但没有运气。任何帮助是极大的赞赏。

标签: pythonsetuptools

解决方案


dependency_links已弃用。这是一个丑陋的黑客,一个非常糟糕的做法。我不建议你这样做。

此 hack 旨在安装为python setup.py install,现在也已弃用。如果您使用pip安装,那么很可能这将不起作用。

一般来说,相对路径依赖在 Python 打包中总是一个坏主意,我建议你用不同的方式解决它。

话虽如此,这样的事情可能会起作用,或者至少在过去的某个时候可能会起作用:

.
├── One
│   ├── one
│   │   └── __init__.py
│   └── setup.py
└── Two
    ├── setup.py
    └── two
        └── __init__.py

One/setup.py

#!/usr/bin/env python3

import setuptools
import pathlib

TWO_PATH = pathlib.Path(__file__).resolve().parent.parent.joinpath('Two')

setuptools.setup(
    name='One',
    version='1.2.3',
    packages=['one'],
    install_requires=['Two'],
    dependency_links=[
        'file://{}#egg=Two-1.2.3'.format(TWO_PATH),
    ],
)

推荐阅读