我有一个依赖于以下github项目的包:https://github.com/jbittencourt/python-escpos.git(不要与PyPi上存在的python-escpos包混淆)。
因此,在我的软件包的requirements.txt中,我有git+https://github.com/jbittencourt/python-escpos.git#egg=escpos
。
当我使用pip install -r requirements.txt
或python setup.py install
(为其install_requires参数解析相同的requirements.txt文件)安装我的软件包时 - 一切都运行良好。
问题在于我将我的包存档到mypackage.tar.gz。归档了一段时间前运行的相同代码,并运行pip install mypackage.tar.gz
后,我收到以下错误:
Collecting escpos (from shopic==1.10.0)
Could not find a version that satisfies the requirement escpos (from shopic==1.10.0) (from versions: )
No matching distribution found for escpos (from shopic==1.10.0)
从玩它开始,我注意到在" #egg =" git+https://github.com/jbittencourt/python-escpos.git#egg=escpos
的一部分 - 它只是试图将它从PyPi中取出(在这种情况下失败)。例如。如果我写了(由于一些奇怪的原因)git+https://github.com/jbittencourt/python-escpos.git#egg=requests
它会安装requests
包。
我不明白为什么它的工作方式不同我所做的就是将文件打包成.tar.gz,而我不知道如何解决它。我不能使用其他安装方法之一,因为我有另一个包具有这个作为其依赖项,并且当我在该包上运行pip install时,它将此tar.gz文件作为其依赖项之一,因此它失败了。
为什么会发生这种情况以及如何解决这个问题?感谢。
修改:这是我的setup.py供参考:
from setuptools import setup, find_packages
import pip
links = []
requires = []
requirements = pip.req.parse_requirements('requirements.txt', session=pip.download.PipSession())
for item in requirements:
# we want to handle package names and also repo urls
if getattr(item, 'url', None): # older pip has url
links.append(str(item.url))
if getattr(item, 'link', None): # newer pip has link
links.append(str(item.link))
if item.req:
requires.append(str(item.req))
setup(name='mypackage',
version='1.1.0',
description='My Package',
author='EK',
author_email='me@example.com',
url='http://www.example.com',
license='MIT',
packages=find_packages(),
package_data={'': ['*.jar']},
zip_safe=False,
install_requires=requires,
dependency_links=links)