似乎他们在Python 3中取消了通过删除快速加载脚本的所有简单方法 execfile()
有没有一个明显的选择我错过了?
是否有一种标准方法可以将版本字符串与python包关联起来,以便我可以执行以下操作?
import foo
print foo.version
Run Code Online (Sandbox Code Playgroud)
我想有一些方法可以在没有任何额外硬编码的情况下检索数据,因为setup.py已经指定了次要/主要字符串.我找到的替代解决方案是import __version__在我的foo/__init__.py,然后__version__.py生成setup.py.
使用setuptools/distribute时,我无法让安装程序提取任何package_data文件.我读过的所有内容都表明以下是正确的方法.有人可以建议吗?
setup(
name='myapp',
packages=find_packages(),
package_data={
'myapp': ['data/*.txt'],
},
include_package_data=True,
zip_safe=False,
install_requires=['distribute'],
)
Run Code Online (Sandbox Code Playgroud)
myapp/data/数据文件的位置在哪里.
使用distutils,setuptools等,包版本指定在setup.py:
# file: setup.py
...
setup(
name='foobar',
version='1.0.0',
# other attributes
)
Run Code Online (Sandbox Code Playgroud)
我希望能够从包中访问相同的版本号:
>>> import foobar
>>> foobar.__version__
'1.0.0'
Run Code Online (Sandbox Code Playgroud)
我可以添加__version__ = '1.0.0'到我的包的__init__.py,但我还想在我的包中包含其他导入以创建包的简化接口:
# file: __init__.py
from foobar import foo
from foobar.bar import Bar
__version__ = '1.0.0'
Run Code Online (Sandbox Code Playgroud)
和
# file: setup.py
from foobar import __version__
...
setup(
name='foobar',
version=__version__,
# other attributes
)
Run Code Online (Sandbox Code Playgroud)
但是,foobar如果导入其他尚未安装的软件包,这些额外的导入可能会导致安装失败.使用setup.py和软件包共享软件包版本的正确方法是什么?
情况:
我有一个python库,由git控制,并与distutils/setuptools捆绑在一起.我想基于git标签自动生成版本号,包括for setup.py sdist和alike命令,以及库本身.
对于我可以使用的第一个任务git describe或类似的解决方案(请参阅 如何在我的包中的setup.py(setuptools)中定义版本?).
例如,当我在标签'0.1'并且要求'setup.py sdist'时,我得到'mylib-0.1.tar.gz'; 或'mylib-0.1-3-abcd.tar.gz'如果我在标记后更改了代码.这可以.
问题是:
当我想让这个版本号可用于库本身时,问题出现了,所以它可以将它作为'mylib/0.1-3-adcd'发送到User-Agent HTTP头中.
如果我添加setup.py version命令,如何在我的包中获得setup.py(setuptools)中定义的版本?,然后在制作标签后生成此version.py,因为它使用标记作为值.但是在这种情况下,我需要在制作版本标记之后再进行一次提交,以使代码保持一致.反过来,这需要一个新标签进行进一步捆绑.
问题是:
如何打破这个依赖圈(generate-commit-tag-generate-commit-tag -...)?
基本上我的python包设置如下:
module
\_examples
\_folder1
\_file1.py
\_file2.py
\_folder2
\_file1.py
\_file2.py
Run Code Online (Sandbox Code Playgroud)
基本上我只想使用:
package_data = {
'module': ['examples/*'],
},
Run Code Online (Sandbox Code Playgroud)
因为我的项目总是让人们添加示例,我希望从我的应用程序中轻松列出它们.我可以在示例中为任何FILE工作,但不能通过子目录重新编译.这可能吗?
如果我这样做,sphinx-quickstart我会被问及项目的版本.
我想避免为我的项目版本提供两个位置.
如何在python包装世界中做到这一点?
我如何实际创建使用 git repo 标签进行版本控制的 python 包的发布/发行版,使用setuptools和pbr?
关于所需的基本设置和配置有很多信息:
setuptools和生成的版本信息pbr但是关于如何实际创建发行版的简单信息在哪里?
即我正在寻找任何命令找到带有版本信息的 git 标记并将其拉入配置信息中,因此可以分发具有该新版本信息的源,并且可以使用类似的方法从脚本中发现版本信息在这个答案中描述。
我正在开发一个项目,该项目将仅通过 git repo 分发给其他开发人员,而不是通过PyPi。该项目将使用 以可执行文件的形式发布给用户pyinstaller,因此此包分发仅用于几个关键目的:
pbr从 Git 存储库标签生成版本,因此这些标签可以成为我们版本控制的真实来源pbr其他自动生成从SVN家常的物品,如作者,manifest.in文件,发行票据等。由于setuptools文档专注于使用PyPi和设置完全可分发和可重用的包pip,并且pbr文档只真正告诉您如何修改setuptools配置以使用pbr,因此我找不到有关如何运行分发/发布过程的信息。
我确定它存在于文档中的某个地方,但经过几次错误的启动后,我在这里问。我看到的每一个地方都暗示每个人要么知道如何做到这一点,要么作为过程的一部分神奇地发生。
我只是错过了显而易见的事情吗?
更新:
根据 sinoroc 的回答,看来我需要研究开发模式安装。即任何开发项目的人都会从git克隆,然后使用setuptools开发安装模式安装。
这不是原始问题的直接一部分,而是暗示的,我相信处于相同情况的人会感兴趣(我无法轻易找到信息)。
在他关于更新某些元数据的回答中提供了更多信息,并通过此setuptools文档链接在“开发模式”下工作
我正在使用 C API 为 Python 开发一个模块。如何创建一个在 Python 中被视为全局的变量?
例如,如果我的模块是module,我想创建一个g执行此任务的变量:
import module
print module.g
Run Code Online (Sandbox Code Playgroud)
尤其,g是一个整数。
PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);
PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
Run Code Online (Sandbox Code Playgroud) 我正在尝试打开一些文件,并且我知道使用UTF-8编码的文件中存在一些错误,所以我在python3中要做的是
open(fileName, 'r', errors = 'ignore')
Run Code Online (Sandbox Code Playgroud)
但是现在我需要使用python2,这样做的相应方式是什么?
以下是我更改为编解码器后的代码
with codecs.open('data/journalName1.csv', 'rU', errors="ignore") as file:
reader = csv.reader(file)
for line in reader:
print(line)
Run Code Online (Sandbox Code Playgroud)
文件在这里https://www.dropbox.com/s/9qj9v5mtd4ah8nm/journalName.csv?dl=0
python ×10
setuptools ×4
distutils ×3
git ×2
package ×2
c ×1
distribute ×1
install ×1
python-2.7 ×1
python-3.x ×1
python-c-api ×1
python-pbr ×1
setup.py ×1
string ×1
version ×1
versioning ×1