相关疑难解决方法(0)

Python 3中execfile的替代方法是什么?

似乎他们在Python 3中取消了通过删除快速加载脚本的所有简单方法 execfile()

有没有一个明显的选择我错过了?

python python-3.x

325
推荐指数
10
解决办法
24万
查看次数

将版本嵌入python包的标准方法?

是否有一种标准方法可以将版本字符串与python包关联起来,以便我可以执行以下操作?

import foo
print foo.version
Run Code Online (Sandbox Code Playgroud)

我想有一些方法可以在没有任何额外硬编码的情况下检索数据,因为setup.py已经指定了次要/主要字符串.我找到的替代解决方案是import __version__在我的foo/__init__.py,然后__version__.py生成setup.py.

python string package

241
推荐指数
13
解决办法
11万
查看次数

如何使用setuptools/distribute包含包数据?

使用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/数据文件的位置在哪里.

python setuptools distribute

115
推荐指数
8
解决办法
7万
查看次数

使用setup.py和软件包共享软件包版本的正确方法是什么?

使用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 distutils setuptools

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

setup.py(setuptools)和源代码中的自动版本号?

情况:

我有一个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 git distutils version setuptools

37
推荐指数
5
解决办法
2万
查看次数

是否可以使用dist utils(setup.py)作为包数据的一部分来包含子目录?

基本上我的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工作,但不能通过子目录重新编译.这可能吗?

python install distutils setup.py

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

让sphinx使用setup.py中的版本

如果我这样做,sphinx-quickstart我会被问及项目的版本.

我想避免为我的项目版本提供两个位置.

如何在python包装世界中做到这一点?

python package python-sphinx

16
推荐指数
3
解决办法
2678
查看次数

Python Setuptools 和 PBR - 如何使用 git 标签作为版本创建包发布?

我如何实际创建使用 git repo 标签进行版本控制的 python 包的发布/发行版,使用setuptoolspbr

关于所需的基本设置和配置有很多信息:

但是关于如何实际创建发行版的简单信息在哪里?

即我正在寻找任何命令找到带有版本信息的 git 标记并将其拉入配置信息中,因此可以分发具有该新版本信息的源,并且可以使用类似的方法从脚本中发现版本信息在这个答案中描述。


额外细节

我正在开发一个项目,该项目将仅通过 git repo 分发给其他开发人员,而不是通过PyPi。该项目将使用 以可执行文件的形式发布给用户pyinstaller,因此此包分发仅用于几个关键目的:

  1. 为其他开发人员安装/设置包,以便可以干净地重新创建依赖项/环境。
  2. 管理版本——当前的计划是用于pbr从 Git 存储库标签生成版本,因此这些标签可以成为我们版本控制的真实来源
  3. 使用pbr其他自动生成从SVN家常的物品,如作者,manifest.in文件,发行票据等。

由于setuptools文档专注于使用PyPi和设置完全可分发和可重用的包pip,并且pbr文档只真正告诉您如何修改setuptools配置以使用pbr,因此我找不到有关如何运行分发/发布过程的信息。

我确定它存在于文档中的某个地方,但经过几次错误的启动后,我在这里问。我看到的每一个地方都暗示每个人要么知道如何做到这一点,要么作为过程的一部分神奇地发生。

我只是错过了显而易见的事情吗?


更新:

根据 sinoroc 的回答,看来我需要研究开发模式安装。即任何开发项目的人都会从git克隆,然后使用setuptools开发安装模式安装。

这不是原始问题的直接一部分,而是暗示的,我相信处于相同情况的人会感兴趣(我无法轻易找到信息)。

在他关于更新某些元数据的回答中提供了更多信息,并通过setuptools文档链接在“开发模式”下工作

python versioning git setuptools python-pbr

6
推荐指数
1
解决办法
1919
查看次数

通过 C API 在 Python 模块中定义全局变量

我正在使用 C API 为 Python 开发一个模块。如何创建一个在 Python 中被视为全局的变量?

例如,如果我的模块是module,我想创建一个g执行此任务的变量:

import module
print module.g
Run Code Online (Sandbox Code Playgroud)

尤其,g是一个整数。

Alex Martelli 的解决方案

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)

c python python-module global-variables python-c-api

5
推荐指数
1
解决办法
2377
查看次数

python打开文件错误

我正在尝试打开一些文件,并且我知道使用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 python-2.7

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