Cra*_*een 17 python software-distribution python-2.x python-3.x
我有一个Python模块,我想上传到PyPI.到目前为止,它适用于Python 2.x. 现在编写3.x版本应该不会太难.
但是,遵循在这些地方制作模块的指导原则:
我不清楚如何为不同版本的Python支持多个源代码发布,并且不清楚PyPI是否/如何支持它.我设想我会有单独的代码:
如何在PyPI中设置Python模块,以便有人可以:
easy_install modulename
Run Code Online (Sandbox Code Playgroud)
无论用户是使用2.x还是3.x,它都会安装正确的东西?
Cra*_*een 18
我发现setup.py了httplib2似乎有一种优雅的方式来支持的Python 2.x和3.x的 所以我决定复制那种方法.
任务是setup.py为包所有支持的Python发行版的包分发制作单个.然后用同样的方法setup.py,你可以做到:
python2 setup.py install
Run Code Online (Sandbox Code Playgroud)
以及
python3 setup.py install
Run Code Online (Sandbox Code Playgroud)
应该可以保持setup.py足够简单,以便使用所有受支持的Python发行版进行解析.我已成功完成了cobs支持2.4到2.6以及3.1 的软件包.该软件包包括纯Python代码(Python 2.x和3.x的单独代码)和C扩展,分别为2.x和3.x编写.
去做吧:
1)我将Python 2.x代码放入python2子目录,并将Python 3.x代码放在python3子目录中.
2)I把C扩展代码2.x和3.x在一个src目录下python2和python3.
所以,目录结构是:
root
|
+--python2
| |
| +--src
|
+--python3
| |
| +--src
|
+--setup.py
+--MANIFEST.in
Run Code Online (Sandbox Code Playgroud)
3)在setup.py,我有这些线靠近顶部:
if sys.version_info[0] == 2:
base_dir = 'python2'
elif sys.version_info[0] == 3:
base_dir = 'python3'
Run Code Online (Sandbox Code Playgroud)
4)在调用中setup,我将包指定为正常:
setup(
...
packages=[ 'cobs', 'cobs.cobs', 'cobs.cobsr', ],
Run Code Online (Sandbox Code Playgroud)
5)我使用一个package_dir选项为Python代码指定了基本目录(参考步骤3 base_dir):
package_dir={
'cobs' : base_dir + '/cobs',
},
Run Code Online (Sandbox Code Playgroud)
6)对于C扩展,我给出了路径:
ext_modules=[
Extension('cobs.cobs._cobs_ext', [ base_dir + '/src/_cobs_ext.c', ]),
Extension('cobs.cobsr._cobsr_ext', [ base_dir + '/src/_cobsr_ext.c', ]),
],
Run Code Online (Sandbox Code Playgroud)
这是关于它的setup.py.该setup.py文件可由Python 2.x和3.x解析.
7)最后,如果您使用以下方法构建源代码分发:
python2 setup.py sdist
Run Code Online (Sandbox Code Playgroud)
那么它默认只会拉入为Python构建特别需要的文件.例如,在上面的例子中,您只能获取python2源代码分发中的文件,而不是下面的文件python3.但是对于完整的源代码分发,您希望包含2.x和3.x的文件.为此,请创建一个MANIFEST.in包含以下内容的文件:
include *.txt
recursive-include python2 *
recursive-include python3 *
Run Code Online (Sandbox Code Playgroud)
要查看我的操作,请参阅PyPI或BitBucketcobs上的源代码.
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |