我正在尝试用它构建一个Python发行版distutils
.不幸的是,我的目录结构如下所示:
/code /mypackage __init__.py file1.py file2.py /subpackage __init__.py /build setup.py
这是我的setup.py
档案:
from distutils.core import setup
setup(
name = 'MyPackage',
description = 'This is my package',
packages = ['mypackage', 'mypackage.subpackage'],
package_dir = { 'mypackage' : '../mypackage' },
version = '1',
url = 'http://www.mypackage.org/',
author = 'Me',
author_email = 'me@here.com',
)
Run Code Online (Sandbox Code Playgroud)
当我python setup.py sdist
正确运行它时会生成清单文件,但不会在分发中包含我的源文件.显然,它创建了一个包含源文件的目录(即mypackage1
),然后复制每个源文件mypackage1/../mypackage
,将它们放在分发之外.
如何在不强制我的目录结构符合distutils
预期的情况下更正此问题?
我有一个Python程序需要创建一个命名的临时文件,该程序将在程序过程中打开和关闭几次,并且应该在程序退出时删除.不幸的是,tempfile
似乎没有任何选项可行:
TemporaryFile
没有可见的名字NamedTemporaryFile
创建一个类文件对象.我只需要一个文件名.我已经尝试关闭它返回的对象(设置后delete = False
),但是当我稍后尝试打开文件时出现流错误.SpooledTemporaryFile
没有可见的名字mkstemp
返回打开的文件对象和名称; 它不保证程序退出时删除文件mktemp
返回文件名,但不保证程序退出时删除文件我尝试在上下文管理器中使用mktemp
1,如下所示:
def get_temp_file(suffix):
class TempFile(object):
def __init__(self):
self.name = tempfile.mktemp(suffix = '.test')
def __enter__(self):
return self
def __exit__(self, ex_type, ex_value, ex_tb):
if os.path.exists(self.name):
try:
os.remove(self.name)
except:
print sys.exc_info()
return TempFile()
Run Code Online (Sandbox Code Playgroud)
......但这给了我一个WindowsError(32, 'The process cannot access the file because it is being used by another process')
.文件名由我的程序生成的进程使用,即使我确保在退出之前进程完成,但它似乎有一个不受我控制的竞争条件.
处理这个问题的最佳方法是什么?
1我不需要担心这里的安全问题; 这是测试模块的一部分,所以最邪恶的人可能会导致我们的单元测试虚假失败.惊恐的事件!
我在Eclipse中使用PyDev开发Python,我的一些代码在代码分析工具中生成错误.特别:
class Group(object):
def key(self, k):
class Subkey(object):
def __enter__(s):
self._settings.beginGroup(k)
return self
def __exit__(s, type, value, tb):
self._settings.endGroup()
return Subkey()
Run Code Online (Sandbox Code Playgroud)
给我一个"Method '__enter__- group' should have self as first parameter"
错误,以及类似的错误__exit__
.有没有办法解决这个问题而不分配self
给另一个变量并在其他方法签名中重用该变量?
我有一个Python程序,用于存储数据并将数据写入文件.数据是原始二进制数据,内部存储为str
.我是通过utf-8编解码器写出来的.但是,我进入UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 25: character maps to <undefined>
了cp1252.py
文件.
这看起来像Python试图使用默认代码页来解释数据.不过,这并不有一个默认的代码页.这就是我使用的原因str
,而不是unicode
.
我想我的问题是:
我有一个Jenkins的工作,打算做以下事情:
因为我们有一个测试服务器,所以我们需要确保Jenkins一次只运行这个作业的单个版本.不幸的是,我们似乎无法找到一种方式来运行失败的作业,并从下游作业运行时执行保持上游工作.
是否有捷径可寻?有没有更好的办法?
我有很多SAS格式的文件,我希望能够在SAS之外的程序中读取它们.除了安装基础SAS系统之外,我什么都没有.我可以手动转换每一个,但我想要一种自动执行的方法.
我是Python的新手,在单元测试我的对象上的一些方法时,我发现了一些"怪异"的东西.
class Ape(object):
def __init__(self):
print 'ooook'
def say(self, s):
print s
def main():
Ape().say('eeek')
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我写了这个小例子来说明我感到困惑的地方.如果你做Ape().说('eeek')这实际上是实例化一个Ape对象并运行init方法吗?我以为它不会,但我有一些奇怪的副作用,所以现在我在想它呢?
我有一个Qt4应用程序(使用PyQt绑定),其中包含a QListWidget
,初始化如下:
class MyList(QtGui.QListWidget):
def __init__(self):
QtGui.QListWidget.__init__(self)
self.setDragDropMode(self.InternalMove)
Run Code Online (Sandbox Code Playgroud)
我可以添加项目,这允许我拖放以重新排序列表.但是如何在用户重新排序列表时收到通知?我尝试dropMimeData(self, index, data, action)
在类中添加一个方法,但它永远不会被调用.
我正在查询数据库并使用Python归档结果,我正在尝试在将数据写入日志文件时压缩数据.不过,我遇到了一些问题.
我的代码看起来像这样:
log_file = codecs.open(archive_file, 'w', 'bz2')
for id, f1, f2, f3 in cursor:
log_file.write('%s %s %s %s\n' % (id, f1 or 'NULL', f2 or 'NULL', f3))
Run Code Online (Sandbox Code Playgroud)
但是,我的输出文件大小为1,409,780.bunzip2
在文件上运行会生成一个大小为943,634的文件,并在其bzip2
上运行会导致大小为217,275.换句话说,未压缩文件明显小于使用Python的bzip编解码器压缩的文件. 有没有办法解决这个问题,除了bzip2
在命令行上运行?
我尝试了Python的gzip编解码器(将行更改为codecs.open(archive_file, 'a+', 'zip')
)以查看它是否解决了问题.我仍然获得大文件,但是gzip: archive_file: not in gzip format
当我尝试解压缩文件时也遇到错误. 那里发生了什么?
编辑:我原来在附加模式下打开文件,而不是写模式.虽然这可能是也可能不是问题,但如果文件以'w'模式打开,问题仍然存在.
我正在用Python写一个git pre-commit钩子,我想定义一个像.gitignore
文件一样的黑名单,以便在处理文件之前检查文件。有没有一种简单的方法来检查是否根据一组.gitignore
规则定义了文件?这些规则有点神秘,我宁愿不必重新执行它们。