我正在使用setuptools来编写我编写的Python脚本
安装后,我做:
$ megazord -i input -d database -v xx-xx -w yy-yy
Run Code Online (Sandbox Code Playgroud)
就像我运行它一样./like_this
但是,我得到:
Traceback (most recent call last):
File "/usr/local/bin/megazord", line 9, in <module>
load_entry_point('megazord==1.0.0', 'console_scripts', 'megazord')()
TypeError: main() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
看起来像setuptools不会将我的参数发送到要解析的main()(通过optparse)
这是我对entry_points的setuptools配置:
entry_points = {
'console_scripts': [
'megazord = megazord.megazord:main',
'megazord-benchmark = megazord.benchmark:main',
'megazord-hash = megazord.mzhash:main',
'megazord-mutate = megazord.mutator:main',
]
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试测试包含一些f90文件的包.如果我构建或安装并指定fortran编译器,它可以正常工作.但是,当我尝试测试时,我收到以下错误:
C:\Users\jsalvatier\workspace\scikits.bvp_solver>python setup.py config_fc --fcompiler=gfortran test
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
running test
running egg_info
running build_src
build_src
building extension "scikits.bvp_solver.bvp_solverf" sources
f2py options: []
adding 'build\src.win32-2.6\fortranobject.c' to sources.
adding 'build\src.win32-2.6' to include_dirs.
adding 'build\src.win32-2.6\scikits\bvp_solver\lib\bvp_solverf-f2pywrappers2.f90' to sources.
building data_files sources
build_src: building npy-pkg config files
writing scikits.bvp_solver.egg-info\PKG-INFO
writing namespace_packages to scikits.bvp_solver.egg-info\namespace_packages.txt
writing top-level names to scikits.bvp_solver.egg-info\top_level.txt
writing dependency_links to scikits.bvp_solver.egg-info\dependency_links.txt
reading manifest file 'scikits.bvp_solver.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'scikits.bvp_solver.egg-info\SOURCES.txt' …
Run Code Online (Sandbox Code Playgroud) pkg_resources api让我们获取表示目录中鸡蛋分布的Distribution对象。我可以使用dist.project_name
和轻松获取项目名称和发行版本dist.version
,但是我迷失了如何获取安装脚本中通常指定的其他元数据(例如作者,描述等)。
我想让我的程序可插拔.我想使用setuptools的方式,使用鸡蛋.
我已经能够制作一个插件来为某些功能提供替代类,我可以使用它.
我想选择在运行时使用的类; 我的核心模块或任何插件中的一个.我想使用pkg_resources查询这些类的方式:
for entrypoint in pkg_resources.iter_entry_points("myapp.myclasses"):
Run Code Online (Sandbox Code Playgroud)
如何在核心中为我的类创建一个EntryPoint对象并注册它,以便iter_entry_points将以与我的.egg插件类相同的方式返回它?
我有一个python包A依赖于另一个名为godot的私有包(托管在bitbucket,应该通过git + ssh协议访问).在包A的setup.py中,我有以下代码:
...
install_requires=['godot'],
dependency_links=['git+ssh://git@bitbucket.org/xxx/godot.git#egg=godot']
...
Run Code Online (Sandbox Code Playgroud)
我这里有两个问题:
现在setuptools 1.4(最新的稳定版本)不支持'git + ssh'协议,只有开发分支中的代码处理这个协议:Python setuptools:如何在install_requires下列出一个私有存储库?.我通过以下方式安装了开发版本:
pip install --upgrade --force-reinstall hg+https://bitbucket.org/pypa/setuptools#egg=setuptools
我几乎解决了这个问题,但我想知道是否有其他方法可用?调用pip install -r requirements.txt(在requirements.txt中有git + ssh://git@bitbucket.org/xxx/godot.git#egg=godot列表)?
第二个问题是名称冲突.pypi上还有另一个名为godot的软件包,所以当我使用follow命令安装软件包时,pip从pypi index安装了godot:
pip install git+ssh://git@pypi.corp.com/xxx/A.git#egg=A
如何强制pip(setup.py)来安装私有的godot包,而不是pypi索引上的那个?
我一直在努力创建一个python包,其中包含一些我想在numpy中使用f2py合并的fortran代码.目标是将其上传到PyPI,以便用户可以使用pip进行安装.我做了一些研究,发现setuptools和numpy.distutils.core具有我想要的功能(我认为).包的结构如下,
rabacus
--setup.py
--README.txt
--MANIFEST.in
--rabacus
----f2py
----python_mod1
----python_mod2
----python_mod3
Run Code Online (Sandbox Code Playgroud)
我在目录f2py中有fortran代码.我的包需要numpy和另一个名为quantity的python包,这两个包都在PyPI中.我已经使用install_requires关键字向setup函数指出了这一点.我的测试周期是这样的,
注册并上传包到PyPI
python setup.py register sdist upload
Run Code Online (Sandbox Code Playgroud)
创建一个没有系统包的虚拟环境
virtualenv --no-site-packages venv
Run Code Online (Sandbox Code Playgroud)
进入虚拟环境并尝试使用pip进行安装
cd venv/bin
./pip install rabacus
Run Code Online (Sandbox Code Playgroud)
我想要检测未满足的要求(numpy和数量),下载它们然后继续我的包安装.我很困惑我应该调用哪个设置函数(来自setuptools的那个或来自numpy.distutils.core的那个).似乎有一个有install_requires,一个有ext_modules.到目前为止,当我在虚拟环境中执行pip命令时,我得到一个错误,抱怨找不到numpy
Downloading/unpacking rabacus
Downloading rabacus-0.9.0.tar.gz (1.7MB): 1.7MB downloaded
Running setup.py egg_info for package rabacus
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "/home/galtay/bitbucket/rabacus/venv/build/rabacus/setup.py", line 3, in <module>
import numpy.distutils.core
ImportError: No module named numpy.distutils.core
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line …
Run Code Online (Sandbox Code Playgroud) 我可以为setuptools设置下载缓存路径吗?我可以通过设置环境变量PIP_DOWNLOAD_CACHE(如何缓存下载的PIP包)来实现pip ,但我不知道如何处理setuptools.
我每次跑步时都想要:
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
setuptools缓存下载的文件,因此我不必再次下载它.
我是setuptools
第一次使用,并尝试打包我的代码,以便其他人可以轻松地开发它.我在虚拟环境中运行一切.
简短的问题:如何在运行时更改egg-link指向的目录python setup.py develop
?
长问题:我正在开发的模块被称为cops_and_robots
.当我跑步时python setup.py install
,事情很好,我可以导入我的cops_and_robots
模块.但是,当我运行时python setup.py develop
,运行import cops_and_robots
失败,因为cops_and_robots.egg-link
指向错误的目录:
(cops_and_robots)Antares:cops_and_robots nick$ cat ~/virtual_environments/cops_and_robots/lib/python2.7/site-packages/cops-and-robots.egg-link
/Users/nick/Downloads/cops_and_robots/
.
Run Code Online (Sandbox Code Playgroud)
这是目录结构:
|____Downloads
| |____cops_and_robots # the whole package directory
| | |____...
| | |____requirements.txt
| | |____setup.py
| | |____src
| | | |____cops_and_robots # the python package directory
| | | |______init.py__
| | |____...
Run Code Online (Sandbox Code Playgroud)
我的setup.py
:
from setuptools import setup, find_packages
import …
Run Code Online (Sandbox Code Playgroud) 我正在使用Babel开发Flask应用程序.由于Distutils/Setuptools集成,编译/提取/ ...函数的所有参数都存储在setup.cfg
并编译i18n文件就像
./setup.py compile_catalog
Run Code Online (Sandbox Code Playgroud)
大.现在我希望在运行时自动完成
./setup.py install
Run Code Online (Sandbox Code Playgroud)
在make
的话,那将是让install
目标取决于compile_catalog
目标.
我们只.po
在代码库中存储translation()文件..gitignore排除.mo
和.pot
跟踪文件.
当开发人员提取代码的新版本时,他会运行
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
更新依赖项并在开发模式下安装项目.然后,使用上面的命令行,他编译翻译binary(.mo
)文件.
是否有一种简单且推荐的修改方法可以setup.py
一步完成两个操作?或者我试图滥用setuptools
?
使用这样的脚本可用于开发目的:
#!/bin/sh
./setup.py compile_catalog
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
但是我想要一个解决方案,当使用通常的setup.py
安装说明安装软件包时也能正常工作,就像从PyPi安装一样.
我是否应该理解setuptools
不应该像这样使用,分发软件的人在创建档案时手动或使用自定义脚本编译翻译文件,而不是依赖于setup.py
在安装时编译它们?
我在互联网上找不到很多帖子来解决这个问题.我找到的涉及pybabel
从函数中运行命令行界面setup.py
,这听起来很遗憾,因为它错过了setuptools集成的重点.
我有一个本地pip镜像,所以我的主目录中有这个特定的pip配置:
[global]
index=file:///somewhere/python/pypi_mirror/simple
Run Code Online (Sandbox Code Playgroud)
当我这样做时pip install module
,依赖项是从本地镜像正确获取的。
但是,当我使用命令行安装软件包时:
python setup.py install
Run Code Online (Sandbox Code Playgroud)
Python尝试从pip.org而不是从本地镜像获取依赖项。
为什么?
注意,该问题也出现在PIP_INDEX_URL
:
export PIP_INDES_URL=http://you_failure
python setup.py install
...
Searching for xmltodict
Reading https://pypi.python.org/simple/xmltodict/
...
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?