标签: setuptools

如何在我的项目分发中包含包子文件夹?

我有一个具有这种结构的项目:

SomeProject/
    bin/
    CHANGES.txt
    docs/
    LICENSE.txt
    MANIFEST.in
    README.txt
    setup.py
    someproject/
        __init__.py
        location.py
        utils.py
        static/
            javascript/
                somescript.js
Run Code Online (Sandbox Code Playgroud)

和一个“setup.py”如下:

#!/usr/bin/env python

import someproject
from os.path import exists
try:
    from setuptools import setup, find_packages
except ImportError:
    from distutils.core import setup, find_packages

setup(
    name='django-some-project',
    version=someproject.__version__,
    maintainer='Some maintainer',
    maintainer_email='some@manteiner.com',
    packages=find_packages(),
    include_package_data=True,
    scripts=[],
    url='https://github.com/xxx/some-project',
    license='LICENSE',
    description='Some project description.',
    long_description=open('README.markdown').read() if exists("README.markdown") else "",
    install_requires=[
        "Django >= 1.4.0"
    ],
)
Run Code Online (Sandbox Code Playgroud)

然后,当我使用命令上传它时:

python setup.py sdist upload
Run Code Online (Sandbox Code Playgroud)

看起来没问题,但是包中没有包含此“javascript”子文件夹的“静态”文件夹。我的“setup.py”灵感来自具有类似结构的 github.com/maraujop/django-crispy-forms。关于上传此子文件夹有什么问题的任何提示?

python django setuptools distribute pypi

6
推荐指数
1
解决办法
5691
查看次数

pyinstaller 导入错误:没有名为 pkg_resources 的模块

我正在尝试使用 Pyinstaller 打包我的 Python 脚本。我的脚本导入了第三方模块 Exscript 和 Netaddr。当我尝试运行 Pyinstaller 生成的可执行文件时,出现以下错误。

我知道“pkg_resources”指的是 setuptools,但是我检查了并且我在 site-packages 下有 setuptools 18.2,我看到在脚本目录中很容易安装。我正在运行 Python 2.7。

任何有关让 Pyinstaller 工作的帮助表示赞赏。仅供参考,我确实在这里搜索并查看了类似的问题,但它们不适用于这个特定问题。

这是运行 Pyinstaller 的输出(我只包含错误):

C:\Python27\Lib\PyInstaller-2.1>pyinstaller c:\users\<username>\pycharmprojects\neworking2\network_login.py
5759 INFO: building because out00-Tree.toc missing or bad
5983 INFO: building because out01-Tree.toc missing or bad
7097 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
9569 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
9591 INFO: rebuilding out00-EXE.toc because network_login.exe missing
Run Code Online (Sandbox Code Playgroud)

执行 Pyinstaller 生成的 .exe 的输出:

 C:\Python27\Lib\PyInstaller-2.1\network_login\dist\network_login>network_loginTraceback (most recent call last):
File "build\bdist.win32\egg\paramiko\__init__.py", line 30, in …
Run Code Online (Sandbox Code Playgroud)

python setuptools pyinstaller

6
推荐指数
1
解决办法
7232
查看次数

如何使用 setuptools 和 setup.py 从包中排除单个文件

我正在工作blowdrycss。存储库在这里

我希望将 的设置文件blowdrycss_settings.py从 pypi 上的最终包中排除。目的是动态构建将放置在用户 virtualenv / 项目文件夹中的自定义设置文件。

setup.py,我有以下内容:

packages=find_packages(exclude=['blowdrycss_settings.py', ]),
Run Code Online (Sandbox Code Playgroud)

我也试过exclude_package_data

exclude_package_data={
    '': ['blowdrycss_settings.py'],
    '': ['blowdrycss/blowdrycss_settings.py'],
    'blowdrycss': ['blowdrycss_settings.py'],
},
Run Code Online (Sandbox Code Playgroud)

我然后跑python setup.py sdist bdist

但是,当我查看构建文件夹时,我仍然看到blowdrycss_settings.py

- build 
    - lib
        - blowdrycss_settings.py
Run Code Online (Sandbox Code Playgroud)

似乎只排除一个文件应该很简单。

如何blowdrycss_settings.py从分布式包中排除?

python setuptools package pypi

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

如何通过允许预发布来指定 Python 要求?

我对声明 Python 包要求的正确方法有些困惑。

未正式发布的新版本确实具有预发布名称,例如0.2.3.dev20160513165655.

pip 在我们添加--pre选项时安装预发布版本非常聪明,当我们构建开发分支时,我们确实使用它。主分支不使用它。

我发现如果我放入foobar>=0.2.3需求文件,即使我指定了 --pre 参数,也不会选择开发版本。

PIP文档是没有帮助这里太多,因为缺少约预发行点什么。

我使用了将foobar>0.2.2which 与--pre将安装预发行版结合使用的方法。

即使这个有点缺陷,因为如果我们发布一个像0.2.2.1它这样的修补程序可能已经选择了它。

那么,处理这个问题的最佳方法是什么?

旁注:当我们发布版本(从开发到主的拉取请求)时,非常希望不必修补需求文件。请记住,develop 分支一直在使用--pre,而 master 则没有。

python distutils pip setuptools

6
推荐指数
1
解决办法
1667
查看次数

pip 可编辑安装在只读文件系统上

是否可以从位于只读文件系统上的目录进行可编辑的 pip 安装?现在安装工具正在尝试将一个egg文件写入源目录:

$ pip install -e /tf/stuff/
Obtaining file:///tf/stuff
    Complete output from command python setup.py egg_info:
    running egg_info
    writing requirements to src/stuff.egg-info/requires.txt
    error: [Errno 30] Read-only file system: 'src/stuff.egg-info/requires.txt'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tf/stuff/
Run Code Online (Sandbox Code Playgroud)

文档说:

对于本地项目,“SomeProject.egg-info”目录是相对于项目路径创建的。与仅使用 setup.py develop 相比,这是一项优势,后者直接相对于当前工作目录创建“egg-info”。

python distutils pip setuptools setup.py

6
推荐指数
1
解决办法
1391
查看次数

在setuptools中修剪和递归排除之间的区别?

我正在使用setuptools打包自定义模块进行部署,该模块不应包含data/用于开发的目录中的某些文件.我已经成功地recursive-exclude data/ *在我的MANIFEST.in文件中排除了必要的文件,但我也看到我可以通过这样做prune data/

这两种方法都可以package.egg-info/SOURCES.txt在打包后从中删除目标文件python setup.py egg_info

这两者有什么区别吗?

egg manifest setuptools setup.py python-2.7

6
推荐指数
1
解决办法
1436
查看次数

使用 setuptools (pip) 时如何打印警告和错误

我正在使用 setuptools 打包代码,以便可以使用

cd project_name && pip install .
Run Code Online (Sandbox Code Playgroud)

在安装过程中,我想警告用户有关预先存在的配置文件并在系统上打印一些安装后说明。例如

/etc/project_name/project.conf exists. Not copying default config file.
Run Code Online (Sandbox Code Playgroud)

我尝试使用printlogging.warning()但在使用 pip 安装时仍然没有出现警告。我有一种感觉,我错过了一些明显的东西。

我们正在尝试在 Redhat 系列上支持 3.0 > python >= 2.6 >= el6 和 Ubuntu >= 14.04LTS

python error-logging pip setuptools

6
推荐指数
1
解决办法
1526
查看次数

为python setuptools入口点插件编写测试用例

我构建了一个定义setuptools入口点的python应用程序(“主机”应用程序),以便可以对其进行扩展。然后,插件作者必须将以下内容添加到他们的setup.py文件中:

setup(
    # ...
    entry_points = {
        'myapp.plugins': 
        ['plugin_1 = <foo.plugin.module>:<plugin-install-func>']
    }
)
Run Code Online (Sandbox Code Playgroud)

为了测试我的设置,我必须

  • 建立一个假的车轮包装,
  • 用于pip安装它,
  • 将新软件包的文件夹附加到sys.path并调用pkg_resources.working_set.add_entry(package_dir)[*],
  • 只有这样我才能检查预期的行为(运行TC),
  • 用于pip卸载软件包,以及
  • 最后取出从已安装的包的文件夹sys.path

如果必须验证不同的功能,则每个测试用例都需要一个单独的程序包。
整个测试平台相当冗长和笨拙。

有没有更优雅的方式为setuptools 入口点插件编写测试用例?

[*]注:安装轮子或使用PIP *在发展模式pip install -e <plugin-package>不会激活插件在同一个翻译的Linux ; 或至少没有在之后附加package文件夹sys.path。在Windows上,以上问题仅在开发模式下存在。

python plugins testng setuptools

6
推荐指数
1
解决办法
240
查看次数

ImportError:没有名为sysconfig的模块 - 无法使pip工作

我真的在使用RedHat 6.9系统的pip上挣扎.我每次尝试使用pip时都得到了

ImportError: No module named sysconfig
Run Code Online (Sandbox Code Playgroud)

我尝试使用Google搜索解决方案.我没有apt-get,似乎无法用yum获取它,所以清除setuptools是不可能的.我尽我所能手动删除setuptools所以我可以重新安装它们,但是yum确信机器上仍然有setuptools.

几乎所有涉及用yum下载东西的建议对我都不起作用.百胜总是说它无法找到我想要的东西.因此,如果有一种方法可以下载没有yum或apt-get的东西(例如,不通过终端),那可能是最好的.

我的机器上有Python 3和Python 2,所以我不知道这是否会改变你们给我的建议.

1000感谢任何可以提供帮助的人!现在我只能通过anaconda接口(例如Jupyter笔记本和Spyder)完成任务,这是非常有限的.

编辑:这是我的错误跟踪:

Traceback (most recent call last):

  File "/usr/bin/pip2", line 5, in <module>

    from pkg_resources import load_entry_point

  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 947, in <module>

    class Environment(object):

  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 951, in Environment

    self, search_path=None, platform=get_supported_platform(),

  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 180, in get_supported_platform

    plat = get_build_platform()

  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 380, in get_build_platform

    from sysconfig import get_platform

ImportError: No module named sysconfig
Run Code Online (Sandbox Code Playgroud)

编辑2: @hoefling要求我发布以下命令的输出; 第一:

$ yum list installed | grep …
Run Code Online (Sandbox Code Playgroud)

python pip yum setuptools

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

如何使用 setuptools 将 Python 标记添加到 bdist_wheel 命令?

假设我有一个简单的库,它使用setuptools进行打包和分发。在这种情况下,库还需要最低版本的 Python 3.6,这意味着我的 setup.py 将如下所示:

from setuptools import setup, find_packages

setup(
    name='something',
    version='0.0.1',

    description='description',
    long_description=long_description,

    # More metadata

    packages=find_packages(exclude=['tests', 'docs']),

    python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时python setup.py bdist_wheel,我得到一个名为something-0.0.1-py3-none-any.whl. 在这里很明显,python_requiressetuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。

经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:

应该注意的是,wheel打算用作库,因此没有稳定的公共 API。

因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。

有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?

python setuptools continuous-deployment python-wheel

6
推荐指数
1
解决办法
2783
查看次数