我有一个Python应用程序,其中包含一些子包中的非Python数据文件.我一直在使用include_package_data我的选项在setup.py制作发行版时自动包含所有这些文件.它运作良好.
现在我开始使用py2exe.我希望它能看到我拥有include_package_data=True并包含所有文件.但事实并非如此.它只放入我的Python文件library.zip,所以我的应用程序不起作用.
如何让py2exe包含我的数据文件?
我正在开发一个插件架构,需要将类似"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"传递给它.
我们正在将Plone附加组件部署为具有buildout的开发蛋.使用Mr.Builder buildout recipe并且.egg包装在任何时候都没有完成,因此将鸡蛋推送到生产中作为源代码检查.
什么是在每个SVN提交到SVN版本号或时间戳时自动更新setup.py版本标记的最佳方法?这将提供一些跟踪不同包的快速信息.
Distutils似乎提供某种神奇版本的冲压机制,但我没有找到任何参考文档如何使用它.
我有一个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.
我正在使用简单的入口点来制作一个自定义脚本,它在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之前安装pip.但我读过,这pip是一个替代品setuptools.
那么,为什么我必须先安装setuptools然后才能安装pip?
我的项目目录结构如下所示:
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没有创建我的入口点可执行文件?
我使用 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) 假设我有一个带有适当 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) 我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11因为它看起来很简洁,并且有一些很好的工具可以使用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。
通过 CMake 我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的整个项目构建(即如这里使用 setuptools 所述),因为它是一个大项目,我只是为它的一部分提供了一个 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后再运行“setup.py install”来执行其他任何需要使共享库可见的操作,那就更好了到 Python。
这可能吗?或者我是否需要进行一些其他类型的重构,例如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?
python ×10
setuptools ×10
pip ×4
buildout ×1
c++ ×1
distutils ×1
easy-install ×1
entry-point ×1
nunjucks ×1
packaging ×1
plone ×1
py2exe ×1
pybind11 ×1
setup.py ×1
svn ×1