标签: setuptools

让py2exe包含我的数据文件(如include_package_data)

我有一个Python应用程序,其中包含一些子包中的非Python数据文件.我一直在使用include_package_data我的选项在setup.py制作发行版时自动包含所有这些文件.它运作良好.

现在我开始使用py2exe.我希望它能看到我拥有include_package_data=True并包含所有文件.但事实并非如此.它只放入我的Python文件library.zip,所以我的应用程序不起作用.

如何让py2exe包含我的数据文件?

python packaging distutils py2exe setuptools

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

如何找到通过egg-link安装的python包的位置?

我正在开发一个插件架构,需要将类似"foo.bar"的包名称转换为代码所在的绝对路径.imp.find_module似乎做我想要的,除非有问题的代码是通过egg-link安装的(通过'pip install develop'安装).

如果有两个模块foo.bar和foo.bar2通过egg-links安装(并且位于完全独立的文件系统位置,如/ home/bob/foo/bar和/ home/alice/foo/bar2),find_modules不起作用,因为我查找包"foo"并获取foo/bar的位置,但不是foo/bar2.

有人有替代功能的建议吗?find_modules不接受分层名称,因此我不能只将"foo.bar2"传递给它.

python pip setuptools

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

在每个SVN提交上自动更新setup.py版本

我们正在将Plone附加组件部署为具有buildout的开发蛋.使用Mr.Builder buildout recipe并且.egg包装在任何时候都没有完成,因此将鸡蛋推送到生产中作为源代码检查.

什么是在每个SVN提交到SVN版本号或时间戳时自动更新setup.py版本标记的最佳方法?这将提供一些跟踪不同包的快速信息.

Distutils似乎提供某种神奇版本的冲压机制,但我没有找到任何参考文档如何使用它.

python svn plone setuptools buildout

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

pip不会安装setup()中声明的依赖项需要参数

我有一个Python项目,它依赖于wsgi_intercept包.我将它添加到requires我的setup.py文件中的参数:

from setuptools import setup
setup( #...
       #...
       requires = [ 'wsgi_intercept',
               # ...
       ]
 )
Run Code Online (Sandbox Code Playgroud)

然后我执行sdist命令:

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

但是,当我安装包时pip,它不会安装wsgi_intercept,我的包无法正常工作.

我错过了什么?我应该添加其他配置吗pip?我阅读了有关pip需求文件,但它们似乎被部署者使用,而不是de distributor.

python pip setuptools

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

entry_points 不会在 Python 中使用 pip 或 easy_install 创建自定义脚本?

我正在使用简单的入口点来制作一个自定义脚本,它在setup.py

  entry_points = {
           'my_scripts': ['combine_stuff = mypackage.mymod.test:foo']
  }
Run Code Online (Sandbox Code Playgroud)

其中mypackage/mymod/test.py包含:

import argh
from argh import arg
@arg("myarg", help="Test arg.")
def foo(myarg):
    print "Got: ", myarg
Run Code Online (Sandbox Code Playgroud)

当我使用这个安装我的包时(在与 相同的目录中setup.py

pip install --user -e .
Run Code Online (Sandbox Code Playgroud)

入口点似乎根本没有得到处理。这是为什么?

如果我使用 安装distribute easy_install,例如:

easy_install --user -U .
Run Code Online (Sandbox Code Playgroud)

然后入口点得到处理并创建:

$ cat mypackage.egg-info/entry_points.txt 
[my_scripts]
combine_stuff = mypackage.mymod.test:foo
Run Code Online (Sandbox Code Playgroud)

但是没有combine_stuff在我的bin目录中的任何位置放置名为的实际脚本(如~/.local/bin/)。它似乎没有被制造出来。这里出了什么问题?我怎样才能让它制作一个可执行脚本,并且最好也能使用它pip

python pip setuptools easy-install setup.py

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

安装setuptools和pip

我是Python的新手.尝试安装pip.我看到的所有教程都说我先安装setuptools之前安装pip.但我读过,这pip是一个替代品setuptools.

那么,为什么我必须先安装setuptools然后才能安装pip

python pip setuptools

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

为什么setuptools不能创建我的入口点?

我的项目目录结构如下所示:

clc
 |-clc
 |  |-__init__.py
 |  |-clc.py
 |  |-main.py
 |-setup.py
Run Code Online (Sandbox Code Playgroud)

main.py 看起来像这样:

def main():
    print "it works!"
Run Code Online (Sandbox Code Playgroud)

setup.py:

config = {
    ...
    'entry_points':
        'clc_scripts': ['clc = clc.main:main']
    }
}
setup(**config)
Run Code Online (Sandbox Code Playgroud)

当我跑步时python setup.py build,我最终得到以下内容:

running build
running build_py
creating build
creating build/lib
creating build/lib/clc
copying clc/__init__.py -> build/lib/clc
copying clc/clc.py -> build/lib/clc
copying clc/main.py -> build/lib/clc
Run Code Online (Sandbox Code Playgroud)

bin即使我指定了入口点,也没有创建文件夹.它确实创建了一个文件clc.egg-info/entry_points.txt:

$ cat clc.egg-info/entry_points.txt
[clc_scripts]
clc = clc.main:main
Run Code Online (Sandbox Code Playgroud)

为什么setuptools没有创建我的入口点可执行文件?

python setuptools entry-point

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

如何在 setup.py 中执行(安全的)bash shell 命令?

我使用 nunjucks 在 python 项目中模板化前端。Nunjucks 模板必须在生产中预编译。我不在 nunjucks 模板中使用扩展或异步过滤器。与其使用 grunt-task 来监听模板的变化,我更喜欢使用 nunjucks-precompile 命令(通过 npm 提供)将整个模板目录扫描到 templates.js 中。

这个想法是让nunjucks-precompile --include ["\\.tmpl$"] path/to/templates > templates.js命令在 setup.py 中执行,这样我就可以简单地搭载我们的部署程序脚本的常规执行。

我发现setuptools 覆盖distutils 脚本参数可能用于正确的目的,但我不太确定这两个是最简单的执行方法。

另一种方法是使用subprocess直接在 setup.py 中执行命令,但我已被警告不要这样做(而是先发制人,恕我直言)。我真的不明白为什么不。

有任何想法吗?肯定?确认?

更新 (04/2015): - 如果您没有nunjucks-precompile可用的命令,只需使用 Node Package Manager 安装 nunjucks,如下所示:

$ npm install nunjucks
Run Code Online (Sandbox Code Playgroud)

python setuptools nunjucks

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

在没有root访问权限的情况下安装setuptools python模块的简单方法?

假设我有一个带有适当 setup.py 的 python 模块,我想将其安装给我自己的用户。

然而,一个简单的安装会失败,因为它试图在我的系统上全局安装

% python setup.py install
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
copying src/somemodule.py -> build/lib.linux-x86_64-2.7
running install_lib
copying build/lib.linux-x86_64-2.7/somemodule.py -> /usr/local/lib/python2.7/dist-packages
error: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/somemodule.py'
Run Code Online (Sandbox Code Playgroud)

我对机器有 root 访问权限。这不是重点。

有没有办法使用 setuptools 安装(例如,作为用户特定的站点包)。我不是在寻找 virtualenv 也不是python setup.py build,而是在寻找与 pip 一样的东西

% pip install --user somemodule.py 
Run Code Online (Sandbox Code Playgroud)

python setuptools

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

如何导入或安装预构建的 python 扩展模块 (C++)(即不是通过 setuptools 编译的库)?

我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11因为它看起来很简洁,并且有一些很好的工具可以使用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。

通过 CMake 我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的整个项目构建(即如这里使用 setuptools 所述),因为它是一个大项目,我只是为它的一部分提供了一个 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后再运行“setup.py install”来执行其他任何需要使共享库可见的操作,那就更好了到 Python。

这可能吗?或者我是否需要进行一些其他类型的重构,例如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?

c++ python setuptools extension-modules pybind11

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