从私人服务器上的zip文件pip安装不安装要求,当满足要求时找不到包

时间:2017-12-08 13:04:13

标签: python pip setuptools

我已经制作了一个命令行工具来管理服务器端的一些操作,我希望使用来自我们内部工具的私有服务器的pip install轻松地为我的同事分发它,并为其提供更新,所以我们不必用拇指杆走动并做无聊的点子安装。 -r requirements.txt'用于每个工作站。

我想提出一个非常简短的问题,但我相信我必须在设置和项目包中提供尽可能多的英特尔,以便让您了解出了什么问题以及出现了什么问题......

我非常相信我的问题在于我的setup.py文件配置错误。

首先是服务器,它是一个简单的nginx,指向一个带有基本auth .htpass的文件夹,在我有压缩项目的文件夹里(也许这是我的第一个错误?)。

要使用pip(python 3.5+)下载和安装,我只需运行

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安全,我相信这可能是我的第一个错误,但我不能测试它)但它没有安装要求。

zip文件还包含已安装软件包的de EGG文件夹,我尝试删除它,留下它,绝对没有任何差别,对于下载/安装,仍然会因为缺少请求而中断。

如果我确实安装了分离的要求,我可以使用pip安装myPackage(最后!)但是当我尝试通过其入口点调用它时

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 '

您可能会注意到此错误消息来自Windows操作系统,但我在Mac OSX和Ubuntu 16上出现类似错误

如果我转到应该在site-packages中安装它的文件夹并打开它,我的包'mypackage'只有那里的文件位于第一个文件夹级别,因为没有明显的理由它丢弃了所有的鞋面我为该项目准备的文件夹。

所以我的项目结构是:

core/
    setup.py
    requirements.txt
    readme.md
    mypackage/
       __init__.py
       context.py
       my_package.py
       my_client/
          __init__.py
          rest_client.py
          my_urls.py
       my_plugins/
          __init__.py
          cmd_1.py
          cmd_2.py
          ...
          cmd_n.py
          utils/
             __init__.py
             print_table.py

但是在使用pip安装后我只剩下那些文件

mypackage/
   __init__.py
   context.py
   my_package.py

我探索了临时文件pip make,但整个项目都在那里,它根本不安装我需要的所有文件。

到目前为止,我只是通过手动添加缺少的文件来设置安装所有内容,但它使用pip来安装项目。

我认为我误解了setuptools文档,现在我正在寻找一些可能的方法,比如在设置中的包条目中添加更多包,并使用额外的需求而不是需求。

1 个答案:

答案 0 :(得分:1)

所以经过一些头痛后我发现了我做错了什么。

首先,我从我的主程序包导入数据(来自my_package的 init .py),其中一些未使用的导入被PyCharm隐藏/灰显,这些导入的文件导入没有安装包,这就是它不允许安装运行的原因(如果之前运行的是requirements.txt,则导入无关紧要),整个setup.py因为我留下的导入而无法正常工作那里。

现在,setup.py具有以下来自原始的差异:

packages=find_packages(),
include_package_data=True,
zip_safe=False,

工作得很好:D