在Windows 7上,我有一个命令行程序因文件写入权限错误而失败,并且每次运行来自"未知发布者"的命令行程序时都会弹出恼人的UAC对话框.
但是,如果我通过右键单击并选择"以管理员身份运行"来启动我的控制台,那么即使UAC对话框仍然存在,安装也能正常工作.
我的用户已经是"管理员"组的成员,那么"以管理员身份运行"的确是什么使我的安装工作?
我的具体问题恰恰是:"以管理员身份运行"是做什么的?迄今为止的答案都没有解决这个问题.(例如,它是以"管理员"用户身份运行新进程吗?还是以当前用户身份运行进程,但是具有提升权限?如果是,具有哪些权限?这与我从我获得的权限有什么不同?用户在"管理员"组中?
(具体来说,我使用的是来自SourceForge的'Console' ,而不是常规的CMD窗口,但我认为这不重要.这就是在安装Python'distribute'包时通过在'python distribute_setup.py'上运行从python.org新安装的Python3 MSI,它是在64位Windows 32位的Python.参见安装Python和Windows 7发布给"写作失败...权限被拒绝")
我跑的时候
python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
它在我的./dist目录中创建了一个sdist.这包括我的"dist"文件夹中的zip中的"PROJECT-egg.info"文件,我没有使用它,但它不会伤害我,所以我只是忽略它.
我的问题是,为什么它也建立在我的项目根目录下的"PROJECT-egg.info"文件夹?我可以让它停止创建吗?如果没有,我可以在创建sdist后立即删除它吗?
我正在使用从setuptools导入的'setup'功能.WindowsXP,Python2.7,Setuptools 0.6c11,分发0.6.14.
我的设置配置如下:
{'author': 'Jonathan Hartley',
'author_email': 'tartley@tartley.com',
'classifiers': ['Development Status :: 1 - Planning',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python :: 2.7'],
'console': [{'script': 'demo.py'}],
'data_files': [('Microsoft.VC90.CRT',
['..\\lib\\Microsoft.VC90.CRT\\Microsoft.VC90.CRT.manifest',
'..\\lib\\Microsoft.VC90.CRT\\msvcr90.dll'])],
'description': 'Utilities for games and OpenGL graphics, built around Pyglet.\n',
'keywords': '',
'license': 'BSD',
'long_description': "blah blah blah",
'name': 'pygpen',
'options': {'py2exe': {'ascii': True,
'bundle_files': 1,
'dist_dir': …Run Code Online (Sandbox Code Playgroud) 我试图清楚地知道何时应该使用带有gl [Multi] DrawElements等绘制的OpenGL顶点的索引数组,而不是我应该简单地使用连续的顶点数组,用gl [Multi] DrawArrays绘制.
(更新:我得到的回复中的共识是,应该始终使用索引顶点.)
我已经多次在这个问题上来回走动了,所以我将概述我目前的理解,希望有人可以告诉我,我现在终于或多或少正确,或者指出我遗留的误解在哪里.具体来说,我有三个结论,粗体.如果错误请纠正.
一个简单的例子是如果我的几何体由网格组成以形成曲面.在这种情况下,网格中间的顶点对于使用顶点的每个三角形将具有相同的属性(位置,法线,颜色,纹理坐标等).
这使我得出结论:
对于接缝很少的几何体,索引数组是一个巨大的胜利.
始终遵循规则1,除了:
对于非常"块状"的几何体,其中每个边都代表一个接缝,索引数组的好处不那么明显.以一个简单的立方体为例,虽然每个顶点用于三个不同的面,但我们不能在它们之间共享顶点,因为对于单个顶点,表面法线(以及可能的其他东西,如颜色和纹理合作) )每张脸都会有所不同.因此,我们需要在我们的数组中明确引入冗余顶点位置,以便可以使用不同的法线等多次使用相同的位置.这意味着索引数组的使用较少.
例如,渲染立方体的单个面时:
0 1
o---o
|\ |
| \ |
| \|
o---o
3 2
Run Code Online (Sandbox Code Playgroud)
(这可以单独考虑,因为这个面和所有相邻面之间的接缝意味着这些顶点之间不能共享这些顶点)
如果使用GL_TRIANGLE_FAN(或_STRIP)进行渲染,则可以渲染立方体的每个面:
verts = [v0, v1, v2, v3]
colors = [c0, c0, c0, c0]
normal = [n0, n0, n0, n0]
Run Code Online (Sandbox Code Playgroud)
添加索引不允许我们简化此操作.
由此我得出结论:
2.当渲染所有接缝或大多数接缝的几何体时,当使用GL_TRIANGLE_STRIP或_FAN时,我应该永远不要使用索引数组,而应该总是使用gl [Multi] DrawArrays.
(更新:回复表明这个结论是错误的.即使索引不允许我们在这里减小数组的大小,仍然应该使用它们,因为其他性能优势,如评论中所讨论的)
规则2的唯一例外是:
当使用GL_TRIANGLES(而不是条带或扇形)时,一半的顶点仍然可以重复使用两次,具有相同的法线和颜色等,因为每个立方体面都呈现为两个独立的三角形.同样,对于相同的单个立方体面:
0 1
o---o
|\ |
| \ |
| \|
o---o
3 2
Run Code Online (Sandbox Code Playgroud)
没有索引,使用GL_TRIANGLES,数组将是这样的:
verts = [v0, v1, v2, v2, v3, …Run Code Online (Sandbox Code Playgroud) 我试图通过构建验证两种不同对象类型的模式来弄清楚oneOf是如何工作的.例如一个人(名字,姓氏,运动)和车辆(类型,成本).
以下是一些示例对象:
{"firstName":"John", "lastName":"Doe", "sport": "football"}
{"vehicle":"car", "price":20000}
Run Code Online (Sandbox Code Playgroud)
问题是我做错了什么,我该如何解决它.这是架构:
{
"description": "schema validating people and vehicles",
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [ "oneOf" ],
"properties": { "oneOf": [
{
"firstName": {"type": "string"},
"lastName": {"type": "string"},
"sport": {"type": "string"}
},
{
"vehicle": {"type": "string"},
"price":{"type": "integer"}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在此解析器中验证它时:
https://json-schema-validator.herokuapp.com/
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[ {
"level" : "fatal",
"message" : "invalid JSON Schema, cannot continue\nSyntax errors:\n[ {\n \"level\" : \"error\",\n \"schema\" : {\n \"loadingURI\" : \"#\",\n \"pointer\" : \"/properties/oneOf\"\n },\n \"domain\" …Run Code Online (Sandbox Code Playgroud) 我想尽可能准确地计算多文件Python项目中的代码行,但不要在总计中包含注释,文档字符串或空行.
我首先尝试使用cloc,它可以作为Debian软件包使用.但是cloc将大多数文档字符串视为代码 - 即使它们是注释.(更新:不再 - 最近版本的cloc现在将Python文档字符串视为注释.)
我注意到下面的一些注释说文档字符串应该包含在总数中,因为它们可能被代码用来影响运行时的行为,因此算作程序代码/ data/config的一部分.一个突出的例子是'ply',它要求你用docstrings编写函数,我记得这些函数包含语法和正则表达式,这些都是程序操作的核心.然而,在我看来这是一个非常罕见的例外.大多数时候,文档字符串就像评论一样.具体来说,我知道对于我想要测量的所有代码都是如此.所以我想从我的行数中排除它们.
Trove分类器列表位于:http://pypi.python.org/pypi?:action = list_classifiers
当我创建一个PyPI包时,我不确定是否需要将'父母'包含在明显适用于我的项目的特洛伊分类器中.
例如,如果我在Windows XP上测试了我的项目,那么我应该包括以下哪项:
'Operating System :: Microsoft',
'Operating System :: Microsoft :: Windows',
'Operating System :: Microsoft :: Windows :: Windows NT/2000',
Run Code Online (Sandbox Code Playgroud)
我实际上只在Window 7或Windows XP上进行过测试.但这些都不是分类器列表中的选项,因此我选择"NT/2000"作为结束匹配,并包括"父"分类器.这是正确的做法吗?
同样,如果我的项目在Python 2.7下测试,那么我显然包括分类器:
'Programming Language :: Python :: 2.7',
Run Code Online (Sandbox Code Playgroud)
我还需要包括:
'Programming Language :: Python',
'Programming Language :: Python :: 2',
Run Code Online (Sandbox Code Playgroud)
第一个是严格的"父",如果是原始分类器,那么是否包含这个大概就像是否包含上面的"Windows"父母一样.
但请注意,"Python :: 2"不是"2.7"分类器的父级 - 它是兄弟姐妹.如果它旨在表明我的项目在某些 2.x Python版本下工作,那么包括它是有意义的,但如果它意图暗示我的项目在所有 2.x版本下工作则不行.
Virtualenvwrapper是一个围绕Python的virtualenv的用户友好的shell.
Python 3.3附带pyvenv内置于标准库中,旨在取代virtualenv.
但是如果我在Python3.3上安装Virtualenvwrapper,它仍会安装virtualenv,让我相信它不会使用'pyvenv'.
据推测这并不重要 - 如果我想在Python3.3上使用virtualenvwrapper,我应该高兴地让它使用virtualenv而不是pyvenv,并且(目前)会不会受到任何不良影响?
我听说D与C链接兼容.我想使用D为Python创建扩展模块.我忽略了为什么它永远不会起作用的一些原因?
我的问题是,当我将我的Python包上传到PyPI,然后使用pip从那里安装它时,我的应用程序中断,因为它将我的文件安装到完全不同的位置,而不是我从本地sdist安装完全相同的包.
从本地sdist安装将文件放在我的系统上,如下所示:
/Python27/
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
data/ (images and shader source)
doc/ (html)
examples/ (.py scripts that use the library)
gloopy/ (source)
Run Code Online (Sandbox Code Playgroud)
这就像我期望的那样,并且运行正常(例如我的源代码可以找到我的数据目录,因为它们彼此相邻,就像它们在开发中一样.)
如果我将相同的sdist上传到PyPI,然后使用pip从那里安装它,那么事情看起来非常不同:
/Python27/
data/ (images and shader source)
doc/ (html)
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
gloopy/ (source files)
examples/ (.py scripts that use the library)
Run Code Online (Sandbox Code Playgroud)
这根本不起作用 - 我的应用程序无法找到它的数据文件,加上显然它是一团糟,用我所有的垃圾污染顶级/ python27目录.
我究竟做错了什么?如何使pip安装表现得像本地sdist安装?这甚至是我应该努力实现的目标吗?
我安装了setuptools,也分发了,我正在调用distribute_setup.use_setuptools()
WindowsXP,Python2.7.
我的开发目录如下所示:
/gloopy
/data (image files and GLSL shader souce read at runtime)
/doc (html files)
/examples (some …Run Code Online (Sandbox Code Playgroud) python ×6
distribute ×2
distutils ×2
pypi ×2
setup.py ×2
setuptools ×2
arrays ×1
bash ×1
count ×1
d ×1
indexed ×1
json ×1
jsonschema ×1
lines ×1
module ×1
nonblank ×1
opengl ×1
privileges ×1
python-3.3 ×1
python-venv ×1
runas ×1
schema ×1
unix ×1
vertex ×1
virtualenv ×1
windows ×1
windows-7 ×1