小编Joë*_*oël的帖子

pyinstaller似乎没有找到数据文件

编辑3:当我需要知道我的脚本/可执行文件的位置时,我替换__file__sys.argv[0].这不完全一样,但在我的情况下它似乎运行良好(至少在可执行版本...).现在一切都工作正常,在单文件模式下,使用接受的答案功能来访问资源文件!


编辑2:如接受的答案的评论所示,问题来自我的脚本中的路径解析; 我尝试使用__file__获取脚本的位置,以便我可以访问其资源文件.打包后这不起作用,因为它__file__会将文件名从Python.dll脚本返回到脚本,所以总是没有路径而只是文件名.所以我必须找到另一种技巧来访问资源文件; 目前解决方法是将当前目录移动到可执行路径.

顺便说一句,这意味着ConfigParser应该在访问文件时报告问题,而不是缺少某个部分.

我将以解决此路径解析问题的方式更新此问题.


我遇到了问题pyinstaller,因为这是我第一次使用它,我确信我做错了.

所以,这就是问题:pyisntaller在我编写的脚本上顺利运行,并在dist文件夹中生成一些东西.好的,所以现在我想执行它以查看是否一切顺利,这就是我得到的:

C:\Program Files\PyInstaller\pyinstaller-1.5.1>p_tool\dist\p_tool\p_tool.exe -?
Traceback (most recent call last):
  File "<string>", line 104, in <module>
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 76, in f
ileConfig
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 112, in
_create_formatters
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/ConfigParser", line 532, in ge
t
ConfigParser.NoSectionError: No section: 'formatters'
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是logging.conf文件丢失了,所以我在文件中添加了它(以及其他一些资源文件)p_tool.spec,但这并不是更好.

Python版本:2.6.6,在WinXP下.我正在使用,pyinstaller因为我需要它来封装Solaris工作站的文件.

那么,有人确实有这个问题吗?唯一相关的主题是以下问题:PyInstaller问题,非常接近我的问题,但绝对没有答案.


Edit3:删除日志记录的详细信息,与问题无关.

python pyinstaller

7
推荐指数
1
解决办法
6536
查看次数

help()与unicode __author__字符串

在我的Python 2.6脚本的开头,我想写下我的名字拼写,即"Joël"(与e上的trema).所以我写了__author__ = u'Joël',我可以通过一个简单的方法来检索它print __author__.

内置help()函数出现问题,因为我收到错误消息:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xeb' in position 2: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我无法升级到Python 3.x,我发现这个功能非常有用(而且肯定会是那些将获得我的脚本的人).我也没有忘记用UTF-8编码文件,并通过添加以下内容在脚本中指定它:

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

有什么想法来自何处?

提前感谢您的回答.


编辑再次查看"Dive Into Python"一书,我发现如何在我的机器上进行正确的渲染,请参阅http://www.diveintopython.org/xml_processing/unicode.html.

我的想法是,我对Python的默认编码是ASCII,这确实阻止了help()产生正确的输出.我所做的是添加一个名为sitecustomize.pyin in 的脚本{pythondir}\Lib\site-packages,设置默认编码:

import sys
sys.setdefaultencoding('iso-8859-1')
Run Code Online (Sandbox Code Playgroud)

现在,使用类似的输入字符串u'Joël',通过调用help()得到正确的输出.

问题是,我很确定这会破坏其他人的计算机.知道怎么处理这个吗?

python author character-encoding pydoc

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

Python模块:如何防止导入新模块调用的模块

我是新手,Python正在创建一个模块以重用一些代码。我的模块(impy.py)看起来像这样(到目前为止,它只有一个功能)...

import numpy as np
def read_image(fname):
    ....
Run Code Online (Sandbox Code Playgroud)

并将其存储在以下目录中:

custom_modules/
              __init.py__
              impy.py
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用了numpy模块。问题是当我从另一个脚本导入它时,就像这样...

import custom_modules.impy as im
Run Code Online (Sandbox Code Playgroud)

然后我输入im.不仅可以调用函数的选项,还可以调用read_image()模块的选项np

如何使它仅可用于我在模块中编写的功能,而不能在模块正在调用的模块(在这种情况下为numpy)中使用?

非常感谢您的帮助。

python python-module python-import python-2.7

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

为什么当`read-line`返回一个字符串时`read`返回一个符号

我正在通过遵循Hackerrank 30 days of code 来学习 Clojure ,并且由于我既不理解也找不到任何文档或解释的行为而损失了几个小时:

因此,解析一行(read) (read)以获取映射键和值会导致键成为符号,而不会被进一步匹配(read-line)

为什么会这样?而且,我在哪里可以找到返回值?(这在 中没有记录(doc read))。

clojure

2
推荐指数
1
解决办法
109
查看次数

在python中使用'or'总是评估为真,它可能与其他条件发生冲突

我正在用 Python 编写一个简单的布尔表达式,它应该遵循这组规则:

  • 参数“you”是你衣服的时髦度,在0..10范围内,“date”是你约会对象在同一范围内衣服的时髦度。
  • 获取表的结果被编码为int带有0=no, 1=maybe,的值 2=yes
  • 如果你们中的任何一个都很时尚,8 或更多,那么结果是2 (yes)。除了如果你们中的任何一个人的风格为2或更少,那么结果是0 (no)。否则结果是1 (maybe)

除了特定条件外,我的代码工作正常。如果您的样式为 8 而您的约会对象的样式为 2 或更少怎么办?应该运行哪个结果,为什么?这是我的代码

def date_fashion(you, date):
    if you>=8 or date>=8:
        return 2
    elif you<=2 or date<=2:
        return 0
    else:
        return 1
Run Code Online (Sandbox Code Playgroud)

如果我运行 date_fashion(10, 2) 它应该给出 0,但它也可以给出 2。

哪一个是正确答案?这里两个条件同时发生冲突哪一个是正确的?结果 0 或结果 2,为什么?我的代码给出 2 但它也可以给出 0。

python python-3.x

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