标签: setuptools

为什么pip安装我的包的旧版本?

我刚刚将我的软件包的新版本上传到PyPi(1.2.1.0-r4):我可以下载egg文件并使用easy_install进行安装,版本检查正确.但是当我尝试使用pip进行安装时,它会安装版本1.1.0.0.即使我明确指定要使用的版本pip install -Iv tome==1.2.1.0-r4,我也会得到这样的信息:Requested tome==1.2.1.0-r4, but installing version 1.1.0.0但我不明白为什么.

我仔细检查parse_version并确认1.2.1上的版本字符串大于1.1.0上的版本字符串,如下所示:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>
Run Code Online (Sandbox Code Playgroud)

所以任何想法为什么选择安装1.1.0而不是?

python pip setuptools

71
推荐指数
6
解决办法
2万
查看次数

如何将静态文件包含到setuptools中 - python包

包含静态文件是不可能的!我尝试了我在教程和文档中找到的所有内容,但都是徒劳的......

我想要包含./static/data.txt,还有我的代码:

# setup.py
import os,glob
from setuptools import setup,find_packages

setup(
    name = "PotatoProject",
    version = "0.1.1",
    author = "Master Splinter",
    author_email = "splinter@initech.com",
    description = ("The potatoproject!"),
    url = 'http://www.google.com',
    license = "BSD",

    # adding packages
    packages=find_packages('src'),
    package_dir = {'':'src'},

    # trying to add files...
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        '': ['static/*.txt'],
        'static': ['*.txt'],
    },

    scripts=['src/startPotato'],
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Topic :: Utilities",
        "License :: OSI Approved :: BSD License",
    ],
)
Run Code Online (Sandbox Code Playgroud)

文件系统: …

python setuptools package

66
推荐指数
4
解决办法
4万
查看次数

Python setuptools:如何在install_requires下列出私有存储库?

我正在setup.py为项目创建一个文件,该文件依赖于私有GitHub存储库.该文件的相关部分如下所示:

from setuptools import setup
setup(name='my_project',
    ...,
    install_requires=[
        'public_package',
        'other_public_package',
        'private_repo_1',
        'private_repo_2',
    ],
    dependency_links=[
        'https://github.com/my_account/private_repo_1/master/tarball/',
        'https://github.com/my_account/private_repo_2/master/tarball/',
    ],
    ...,
)
Run Code Online (Sandbox Code Playgroud)

我使用的setuptools,而不是distutils因为后者不支持install_requiresdependency_links参数每这一答案.

上面的安装文件无法访问带有404错误的私有存储库 - 这是预期的,因为GitHub会将404返回到未经授权的私有存储库请求.但是,我无法弄清楚如何进行setuptools身份验证.

以下是我尝试过的一些事情:

  1. 使用git+ssh://,而不是https://dependency_links为我想如果安装与回购pip.这失败是因为setuptools无法识别此协议("未知的url类型:git + ssh"),尽管分发文档说它应该.同上git+httpsgit+http.

  2. https://<username>:<password>@github.com/...- 仍然得到404.(此方法不能与命令行一起使用curlwget从命令行使用 - 尽管curl -u <username> <repo_url> -O <output_file_name>确实有效.)

  3. 将setuptools(0.9.7)和virtualenv(1.10)升级到最新版本.也尝试安装分发虽然这个概述说它被合并回setuptools.无论哪种方式,没有骰子.

目前我只是setup.py打印出一个警告,必须单独下载私人回购.这显然不太理想.我觉得有一些显而易见的东西让我失踪,但却想不到它会是什么.:)

这里没有答案的重复问题.

python github setuptools

65
推荐指数
4
解决办法
2万
查看次数

如何在setuptools项目的pyproject.toml中引用requirements.txt?

我正在尝试将基于setuptools的项目从传统配置迁移setup.py到现代pyproject.toml配置。

同时,我希望保持基于 的完善工作流程pip-compile,即 arequirements.in被编译为 a requirements.txt(当然对于最终用户/非库项目)。由于完全透明,这具有重要的好处:

  • 由于固定了依赖项的完全传递闭包,因此安装可实现 100% 可重现。
  • 更好地理解依赖传递闭包中的依赖冲突。

因此,我不想pyproject.toml通过dependencies = []列表直接在内部维护依赖项,而是在pip-compiled托管的外部维护requirements.txt

这让我想知道:有没有一种方法可以requirements.txtpyproject.toml配置中引用文件,而不必回退到setup.py脚本?

python pip setuptools pyproject.toml

63
推荐指数
1
解决办法
3万
查看次数

使用setup.py和软件包共享软件包版本的正确方法是什么?

使用distutils,setuptools等,包版本指定在setup.py:

# file: setup.py
...
setup(
name='foobar',
version='1.0.0',
# other attributes
)
Run Code Online (Sandbox Code Playgroud)

我希望能够从包中访问相同的版本号:

>>> import foobar
>>> foobar.__version__
'1.0.0'
Run Code Online (Sandbox Code Playgroud)

我可以添加__version__ = '1.0.0'到我的包的__init__.py,但我还想在我的包中包含其他导入以创建包的简化接口:

# file: __init__.py

from foobar import foo
from foobar.bar import Bar

__version__ = '1.0.0'
Run Code Online (Sandbox Code Playgroud)

# file: setup.py

from foobar import __version__
...
setup(
name='foobar',
version=__version__,
# other attributes
)
Run Code Online (Sandbox Code Playgroud)

但是,foobar如果导入其他尚未安装的软件包,这些额外的导入可能会导致安装失败.使用setup.py和软件包共享软件包版本的正确方法是什么?

python distutils setuptools

62
推荐指数
4
解决办法
1万
查看次数

pip忽略setup.py中的dependency_links

我在setup.py中有dependency_links:

...
dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#egg=python-s3'],
...
Run Code Online (Sandbox Code Playgroud)

但它不起作用.但是install_requires工作正常.也许有另一种方法来设置setup.py所需的git repo?

python distutils pip setuptools easy-install

61
推荐指数
5
解决办法
3万
查看次数

如何编写setup.py以包含git repo作为依赖项

我正在尝试为我的包编写setup.py.我的包需要指定对另一个git仓库的依赖.

这是我到目前为止:

from setuptools import setup, find_packages

setup(
    name='abc',
    packages=find_packages(),
    url='https://github.abc.com/abc/myabc',
    description='This is a description for abc',
    long_description=open('README.md').read(),
    install_requires=[
        "requests==2.7.0",
        "SomePrivateLib>=0.1.0",
        ],
    dependency_links = [
     "git+git://github.abc.com/abc/SomePrivateLib.git#egg=SomePrivateLib",
    ],
    include_package_data=True,
)
Run Code Online (Sandbox Code Playgroud)

当我跑:

pip install -e https://github.abc.com/abc/myabc.git#egg=analyse
Run Code Online (Sandbox Code Playgroud)

我明白了

找不到满足要求的版本SomePrivateLib> = 0.1.0(来自analyze)(来自版本:)未找到SomePrivateLib的匹配分布> = 0.1.0(来自analyze)

我究竟做错了什么 ?

python git django packaging setuptools

61
推荐指数
5
解决办法
2万
查看次数

如何轻松分发具有Python模块依赖性的Python软件?Unix上的Python包安装令人沮丧

我的目标是分发一个Python包,其中包含其他几个广泛使用的Python包作为依赖项.我的包依赖于编写良好的Pypi索引包,如pandas,scipy和numpy,并在setup.py中指定需要某些版本或更高版本,例如"numpy> = 1.5".

我发现,对于那些不是 Python打包专家的Unix精明用户(即使他们知道如何编写Python)来安装像我这样的软件包,即使在使用易于使用的软件包管理器时,我也感到非常沮丧和几乎不可能.我想知道是否有一个替代这个痛苦的过程,有人可以提供,或者如果我的经验只是反映了Python包装和分发的当前状态非常困难.

假设用户将您的包下载到他们的系统上.大多数人会试图"天真地"安装它,使用类似的东西:

$ python setup.py install
Run Code Online (Sandbox Code Playgroud)

因为如果你有关于安装Python软件包的google说明,通常会出现这种情况.这对绝大多数用户来说都是失败的,因为大多数用户的Unix/Linux服务器上没有超级用户访问权限.通过更多搜索,他们将发现"--prefix"选项并尝试:

$ python setup.py install --prefix=/some/local/dir
Run Code Online (Sandbox Code Playgroud)

由于用户不知道Python包装的复杂性,他们会选择一个任意目录作为参数--prefix,例如"~/software/mypackage/".它不会是所有其他Python包所在的干净策划目录,因为大多数用户都不知道这些细节.如果他们安装另一个包"myotherpackage",他们可能会通过它"~/software/myotherpackage",你可以想象这将导致令人沮丧的黑客攻击PYTHONPATH和其他并发症.

继续安装过程,一旦用户尝试使用该包,调用"setup.py install"with "--prefix"也将失败,即使它似乎已正确安装,因为其中一个依赖项可能会丢失(例如pandas,scipy或numpy)和一个包经理没有使用.他们会尝试单独安装这些软件包.即使成功,包也将不可避免地PYTHONPATH归因于给出的非标准目录,"--prefix"并且患者用户将涉及修改它们PYTHONPATH以使得依赖性可见.

在这个阶段,Python精明的朋友可能会告诉用户他们应该使用像"easy_install"主流管理器这样的软件包管理器来安装软件并且需要处理依赖项.安装后"easy_install",这可能很难,他们会尝试:

$ easy_install setup.py 
Run Code Online (Sandbox Code Playgroud)

这也将失败,因为用户通常无权在生产Unix服务器上全局安装软件.通过阅读更多,他们将了解该"--user"选项,并尝试:

$ easy_install setup.py --user 
Run Code Online (Sandbox Code Playgroud)

他们会得到错误:

usage: easy_install [options] requirement_or_url ...
   or: easy_install --help

error: option --user not recognized
Run Code Online (Sandbox Code Playgroud)

他们将非常困惑为什么他们easy_install没有--user选项,因为网上有明确的网页描述选项.他们可能会尝试将其升级easy_install到最新版本并发现它仍然失败.

如果他们继续并咨询Python包装专家,他们会发现有两个版本,两个版本easy_install都被命名为" …

python pip package-managers setuptools distribute

58
推荐指数
2
解决办法
9705
查看次数

用于运行单元测试的Python包结构,setup.py

我不确定我是正确地组织我的包结构还是在setup.py中使用正确的选项,因为我在尝试运行单元测试时遇到错误.

我有这样的结构:

/project
   /bin
   /src
       /pkgname          
           __init__.py
           module1.py
           module2.py
   /tests
       __init__.py
       test1.py
       test2.py
Run Code Online (Sandbox Code Playgroud)

我的setup.py看起来像这样:

#!/usr/bin/env python                                                                                                                                        
from setuptools import setup, find_packages

setup(version='0.1',
      description='Trend following library',
      author='Nate Reed',
      author_email='nate@natereed.com',
      packages=find_packages(),
      install_requires=['numpy'],
      test_suite="tests",                          
)
Run Code Online (Sandbox Code Playgroud)

当我运行'python setup.py test'时,我得到:

nate@nate-desktop:~/PycharmProjects/trendfollowing$ sudo python setup.py test
running test
running egg_info
writing requirements to UNKNOWN.egg-info/requires.txt
writing UNKNOWN.egg-info/PKG-INFO
writing top-level names to UNKNOWN.egg-info/top_level.txt
writing dependency_links to UNKNOWN.egg-info/dependency_links.txt
reading manifest file 'UNKNOWN.egg-info/SOURCES.txt'
writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
running build_ext
Traceback (most recent call last):
  File "setup.py", line 11, in <module> …
Run Code Online (Sandbox Code Playgroud)

python testing setuptools

57
推荐指数
1
解决办法
3万
查看次数

停止setup.py安装为egg

如何停止setup.py将包装作为鸡蛋?或者甚至更好,我如何easy_install安装包作为egg

sudo python setup.py安装

原因是对于格式化的软件包PyDev非常挑剔egg...我现在感兴趣的软件包是boto.

更新:我找到了蛮力的方式:

sudo easy_install -m boto
cd path/to/boto-xyz.egg
sudo mv boto ..
sudo rm -rf boto-xyz.egg
Run Code Online (Sandbox Code Playgroud)

python pydev setuptools easy-install

54
推荐指数
2
解决办法
1万
查看次数