Python Pip从私有服务器上的zip文件安装,不安装要求,当要求满足时,找不到包
我制作了一个命令行工具来管理服务器端的一些操作,我想从一个私有服务器上使用pip安装轻松地为我的同事分发它,我们有内部工具,并为他们提供更新,所以我们不必拿着大拇指四处走动,做无聊的pip安装-r requirements.txt“适用于每个工作站 我想让它成为一个非常简短的问题,但我相信我必须提供尽可能多的关于设置和项目包的英特尔,让您了解什么是错误的,以及它是如何出错的 我几乎相信我的问题在于setup.py文件的错误配置 首先是服务器,它是一个简单的nginx,指向一个带有basic auth.htpass的文件夹,在这个文件夹中我有一个压缩的项目(也许这是我的第一个错误?) 要使用pip(python 3.5+)下载和安装,我只需运行Python Pip从私有服务器上的zip文件安装,不安装要求,当要求满足时,找不到包,python,pip,setuptools,Python,Pip,Setuptools,我制作了一个命令行工具来管理服务器端的一些操作,我想从一个私有服务器上使用pip安装轻松地为我的同事分发它,我们有内部工具,并为他们提供更新,所以我们不必拿着大拇指四处走动,做无聊的pip安装-r requirements.txt“适用于每个工作站 我想让它成为一个非常简短的问题,但我相信我必须提供尽可能多的关于设置和项目包的英特尔,让您了解什么是错误的,以及它是如何出错的 我几乎相信我的问题在于setup.py文件的错误配置 首先是服务器,它是一个简单的nginx,指向一个带有basic au
pip install http://username:password@pip.myserver.io/tools/mypackage.zip
发生的第一个问题是setup.py中的需求没有下载
import os
from setuptools import setup
from mypackage import __version__, project_name
# Utility function to read the README file.
# Used for the long_description. It's nice, because now 1) we have a top level
# README file and 2) it's easier to type in the README file than to put a raw
# string in below ...
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(
name=project_name,
version=__version__,
description='Command line client for maintenance and odd jobs on the server',
long_description=read('README.md'),
classifiers=[
"Development Status :: 2 - Alpha",
"Topic :: Utilities :: Rest",
"Framework :: Click",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
],
keywords='cli rest client admin',
author="Myself",
author_email='lucas@email.com',
packages=['mypackage'],
zip_safe=True,
install_requires=[
'certifi==2017.7.27.1',
'chardet==3.0.4',
'click==6.7',
'idna==2.6',
'requests==2.18.4',
'urllib3==1.22',
'terminaltables==3.1.0',
'tqdm==4.19.4',
'aiohttp==2.3.3',
'aiodns==1.1.1',
'cchardet==2.1.1',
'async-timeout==2.0.0',
],
entry_points='''
[console_scripts]
stp = mypackage.MyPackage:cli
stp-config = mypackage.MyPackage:config
''',
)
因此,它尝试下载zip文件(setup.py标记为zip-safe,我相信这可能是我的第一个错误,但我无法在atm上测试),但它没有安装要求
zip文件还包含已安装软件包的de-EGG文件夹,我尝试将其删除,使其与下载/安装完全相同,但仍然会中断,因为它缺少必备条件
如果我安装了独立的需求,我可以使用pip(finally!)安装我的包,但是当我试图通过它的入口点调用它时
stp --help
我收到一个错误,说明“mypackage不存在”
C:\Users\Scoppio>stp --help
Traceback (most recent call last):
File "C:\Users\Scoppio\AppData\Local\Programs\Python\Python36\Scripts\stp-script.py", line 11, in <module>
load_entry_point('MyPackage==0.2.1', 'console_scripts', 'stp')()
File "c:\users\scoppio\appdata\local\programs\python\python36\lib\site-packages\pkg_resources\__init__.py", line 565, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "c:\users\scoppio\appdata\local\programs\python\python36\lib\site-packages\pkg_resources\__init__.py", line 2631, in load_entry_point
return ep.load()
File "c:\users\scoppio\appdata\local\programs\python\python36\lib\site-packages\pkg_resources\__init__.py", line 2291, in load
return self.resolve()
File "c:\users\scoppio\appdata\local\programs\python\python36\lib\site-packages\pkg_resources\__init__.py", line 2297, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "c:\users\scoppio\appdata\local\programs\python\python36\lib\site-packages\mypackage\__init__.py", line 1, in <module>
from mypackage.my_client import myUrls
ModuleNotFoundError: No module named 'mypackage.my_client '
但是在安装了pip之后,我只剩下这些文件了
mypackage/
__init__.py
context.py
my_package.py
我研究了pip制作的临时文件,但整个项目都在那里,它并没有安装我需要的所有文件
到目前为止,我只通过手动添加缺少的文件来安装所有内容,但这扼杀了使用pip安装项目的意义
我相信我误解了setuptools文档,现在我正在跟踪一些可能的方法,比如在设置中向包条目添加更多的包,以及使用额外的要求而不是要求。因此,在经历了一些头痛之后,我发现我做错了什么 首先,我从我的主包(从我的_包的init.py)导入数据,其中一些未使用的导入被PyCharm隐藏/灰显,这些导入有导入未安装包的文件,这就是它不允许安装运行的原因(如果requirements.txt以前运行过,那么导入就无关紧要了),由于我的导入留在那里,整个setup.py无法工作 setup.py现在具有与原始文件不同的以下条目:
packages=find_packages(),
include_package_data=True,
zip_safe=False,
工作正常:D对于安装后丢失的文件,解决方案很简单-
packages=find_packages()
应该递归地包含所有子模块。像往常一样导入它,从setuptools Import find_packages导入。您使用的是setuptools
还是普通的distutils
?很好,distutils
根本不理解关键字install_requires
。此外,您还有requirements.txt
和install_需要
关键字集-哪一个包含要安装的依赖项?通过单击“setuptools integration”查找,我发现我缺少find_软件包(还有另一个条目,我明天将在此处更正)。此外,要求和安装要求是彼此的精确副本。我相信我使用的是setuptools,因为这就是我要导入的内容和所有内容。好的,那么丢失的软件包的神秘性就解决了。关于未安装的依赖项-如果您下载zip并从本地fs安装它(pip安装下载/mypackage-0.2.1.zip
),那么deps会安装吗?如果不会,我应该能够使用您提供的安装脚本重现问题。不,当我从本地安装时,即使项目未升级,它也不会安装要求。在运行pip安装之前,我必须运行pip安装-r req…。今天晚些时候,我将对此给予更多关注,并尝试解决问题e错误。根据我所见,您应该能够创建一个模拟项目并运行setup.py,得到与我完全相同的错误,如果您没有错误,比较我们所做的步骤以及它们之间的差异将非常有趣。谢谢!我创建了一个新的venv(python3.6
),复制了您的setup.py
,为README.md
添加了存根,为mypackage
添加了存根,其中\uuu init\uuuuuuuuuuu.py
包含两行\uuuuuu版本
和项目名称
,为输入点添加了存根单击命令,并将包
列表替换为查找包s()
,使用python setup.py sdist--formats=zip构建包,切换到新的venv,使用pip install dist/spam-0.1.zip安装包。按照预期安装依赖项。
packages=find_packages(),
include_package_data=True,
zip_safe=False,