我有一台安装了Python 2.3,2.6和3.0的Windows机器,以及安装了Cygwin的2.5机器.我已经下载了pexpect包,但是当我运行"python setup.py install"时,它安装到2.6安装.
我怎么能安装到Cygwin Python安装或任何其他安装?
如果我的Python包中有一个脚本,我怎么能让它从包中读取其他文件,因为__file__包含(例如)/usr/bin/myscript而不是/usr/lib/python3.3/site-packages/mypackage/myscript?
(文件只是模板,而不是模块.)
我目前的项目是在 python 中。对于构建包生成 + 单元测试运行,我正在使用Pybuilder实用程序,它非常酷。我使用了车轮分布在其他系统中安装模块。
存在一个配置文件,应用程序从中读取某些设置。settings.ini 文件在以下路径中,
PROJECT-ROOT
|---- src
|-main
|-python
|- foo
|- conf
| |- settings.ini
|
|-test.py
|-access.py
Run Code Online (Sandbox Code Playgroud)
pybuilder 自动从 build.py 脚本创建 setup.py。问题是二进制轮分发没有打包非 python 文件(*.ini 文件)。在搜索 SO 帖子时,获得诸如在 MANIFEST.mf 中添加之类的信息将解决此问题。但是在添加的同时
project._manifest_include_directory('foo/conf', ('*.ini',))
Run Code Online (Sandbox Code Playgroud)
它只foo/conf/settings.ini在 sdist 中更新,而不是在 bdist(wheel) 上更新。我希望轮文件在 conf/ 目录中包含 settings.ini。在谷歌上搜索,得到了添加的信息 package_data在 setup.py字段将解决此问题的信息。但是使用 Pybuilder 的 build.py,我无法成功执行此操作。
任何人都可以帮我解决这个问题吗?
如果我的所有__init__.py文件都是空的,我是否必须将它们存储到版本控制中,或者有没有办法在安装过程中distutils创建空__init__.py文件?
我一直在setup.py努力做sdist正确的事情.我把它归结为此.我有以下目录结构:
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
setup.py
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的setup.py:
#!/usr/bin/env python
from distutils.core import setup
import distutils
setup(
name='a',
version='0.1',
description='a',
author='a',
author_email='a@a.com',
url='http://a.org',
packages=['my_package','my_package.my_subpackage'],
package_dir={'': '..'},
license= "a",
long_description = 'aaa',
)
Run Code Online (Sandbox Code Playgroud)
(这些'aaa'东西只是占位符.)
无论如何,当我这样做时,它可以正常工作setup.py install,但是当我尝试做的时候setup.py sdist,会发生一些奇怪的事情:
MANIFEST创建一个文件.
在副本my_package中创建的文件夹内现有的my_package文件夹(尽管它缺少一些安装相关的文件,我想的.)
一个dist文件夹在里面创建了一个zipfile,里面是一个带有包名的文件夹,但是在那个文件夹里面没有像我希望的整个包,只有两个文件,setup.py而且PKG-INFO.
我究竟做错了什么?我该如何sdist工作?
setup.py包含它所在的同一目录中的模块,但是在site.packages目录和我添加到pythonpath的lib文件夹中省略了模块.
不要告诉我它不只是导入像python解释器这样的文件.它应该如果你命名它们.
programdir-->
programdir-->
datadir
program.py
functions.py
setup.py
Run Code Online (Sandbox Code Playgroud)
setup.py
from distutils.core import setup
setup(name = "program",
version = "1.0",
description = "a program",
author = "me",
author_email = "email@email.com",
url = "http://www.url.com",
py_modules = ["program", "functions", "tweepy", "anothermod", "webbrowser","" ],
data_files = [("data", ["data/intros.txt"])],
long_description = """
Descriptttttionnnn
"""
)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个大型二进制数据文件,我想将其加载到 C 数组中以便快速访问。数据文件仅包含 4 字节整数序列。
我通过 pkgutil.get_data 函数获取数据,该函数返回一个二进制字符串。以下代码有效:
import pkgutil
import struct
cdef int data[32487834]
def load_data():
global data
py_data = pkgutil.get_data('my_module', 'my_data')
for i in range(32487834):
data[i] = <int>struct.unpack('i', py_data[4*i:4*(i+1)])[0]
return 0
load_data()
Run Code Online (Sandbox Code Playgroud)
问题是这段代码非常慢。读取整个数据文件可能需要 7 或 8 秒。将文件直接读入 C 中的数组只需 1-2 秒,但我想使用 pkgutil.get_data 以便我的模块无论安装在何处都可以可靠地找到数据。
所以,我的问题是:最好的方法是什么?有没有办法直接将数据转换为整数数组,而不需要对 struct.unpack 进行所有调用?而且,作为第二个问题,有没有一种方法可以简单地获取指向数据的指针,以避免不必要地复制 120MB 的数据?
或者,有没有办法让 pkgutil 返回数据的文件路径而不是数据本身(在这种情况下,我可以使用 C 文件 IO 来快速读取文件。
编辑:
仅供记录,这是最终使用的代码(基于 Veedrac 的答案):
import pkgutil
from cpython cimport array
import array
cdef int[:] data
cdef void load_data():
global data
py_data = pkgutil.get_data('my_module', …Run Code Online (Sandbox Code Playgroud) distutils ×7
python ×6
arrays ×1
cython ×1
distribution ×1
install ×1
package ×1
pybuilder ×1
python-3.x ×1