我在分发使用pytz的应用程序时遇到问题.我正在使用Py2Exe从我的Python源创建一个可执行文件.
对于我遇到的问题的简单示例,我有:pytz_test.py:
import pytz
tz_au = pytz.timezone("Australia/Sydney")
print tz_au
Run Code Online (Sandbox Code Playgroud)
在setup.py中:
from distutils.core import setup
import py2exe
setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })
Run Code Online (Sandbox Code Playgroud)
然后我运行setup.py:
python setup.py py2exe
Run Code Online (Sandbox Code Playgroud)
编译可执行文件.运行创建的pytz_test.exe我得到:
Traceback (most recent call last):
File "pytz_test.py", line 3, in <module>
tz_au = pytz.timezone("Australia/Sydney")
File "pytz\__init__.pyc", line 185, in timezone
pytz.exceptions.UnknownTimeZoneError: 'Australia/Sydney'
Run Code Online (Sandbox Code Playgroud)
我认为这是因为时区信息没有与可执行文件捆绑在一起,但我不确定如何实现它.
编辑:一个简单的解决方案是将zoneinfo目录从python site-packages目录中的pytz模块添加到library.zip.
为了自动执行此操作,我按照以下项目使用Google Transit数据Feed中的解决方案,来自:http: //code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.py
我修改后的setup.py现在看起来像:
from distutils.core import setup …Run Code Online (Sandbox Code Playgroud) 我正在使用Pig(0.9.1)和用Python编写的UDF.Python脚本从标准Python库导入模块.我已经能够运行在本地模式下成功调用Python UDF的Pig scrips,但是当我在集群上运行时,看起来Pig生成的Hadoop作业无法找到导入的模块.需要做什么?
例如:
我对Python有一个非常奇怪的问题pytz:它似乎在我的系统上有一个不完整的时区目录(MacOS X 10.8.5,系统Python 2.7.5).
>>> from pytz import timezone
>>> import pytz
>>> utc = pytz.utc
>>> utc.zone
'UTC'
>>> eastern = timezone('US/Eastern')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pytz/__init__.pyc", line 182, in timezone
pytz.exceptions.UnknownTimeZoneError: 'US/Eastern'
Run Code Online (Sandbox Code Playgroud)
所以'US/Eastern'无法找到时区.因此,我试着看一下pytz提供的时区目录:
>>> from pytz import all_timezones
>>> for tz in pytz.all_timezones:
... print tz
...
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry …Run Code Online (Sandbox Code Playgroud)