Setup.py 安装需要本地包
Setup.py install requires local package
我正在使用 setuptools
安装软件包 my-package
。 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.
我已经尝试了 的解决方案,但没有成功。非常感谢任何帮助。
dependency_links
已弃用。这是一个丑陋的 hack,一个非常糟糕的做法。我不建议你这样做。
此 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),
],
)
我正在使用 setuptools
安装软件包 my-package
。 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.
我已经尝试了
dependency_links
已弃用。这是一个丑陋的 hack,一个非常糟糕的做法。我不建议你这样做。
此 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),
],
)