
1如果导入的模块和主程序在同个目录下,直接import就行了
2如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__py文件,该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录模块”导入即可。
3如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:
(1)通过”import sys,syspathappend('父目录的路径')“来改变,这种方法属于一次性的,只对当前的python解释器进程有效,关掉python重启后就失效了。
(2)直接修改环境变量:在windows中是 “ set 变量=‘路径’ ” 例如:set PYTHONPATH=‘C:\test\’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看syspath,会发现已经有了新增加的路径了。这 种方式是永久的,一次设置以后一直都有效。在linux中是 "export 变量=‘路径’ “,查看是" echo $变量 "
通过修改path是通用的方法,因为python解释器就是通过syspath去一个地方一个地方的寻找模块的。
Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现:
1 在python安装目录下的/Tools/i18n/(windows下例 D:\Program Files\Python25\Tools\i18n)目录中找到pygettextpy运行之,生成翻译文件模版messagespot,内容大概是这个样子:
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2007-01-24 15:05+China Standard Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@liorg>\n"
"MIME-Version: 10\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
"Generated-By: pygettextpy 15\n"
改之,charset=gb2312 Content-Transfer-Encoding: utf8如下:
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@liorg>\n"
"MIME-Version: 10\n"
"Content-Type: text/plain; charset=gb2312\n"
"Content-Transfer-Encoding: utf8\n"
"Generated-By: pygettextpy 15\n"
那个msgid” ” 和msgstr” “不要动
好,翻译文件已经建立了,保存之,文件名改为langpo
2 建立翻译文件路径,在主文件目录下建立中文翻译路径 /locale/cn/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\cn\LC_MESSAGES,其中src目录是源文件主目录),英文翻译路径 /locale/en/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\en\LC_MESSAGES,其中src目录是源文件主目录)
3 在主文件中引入gettext模块:
# -- coding: utf-8 --
#!/usr/bin/env python
import gettext
gettextinstall('lang', '/locale', unicode=False)
gettexttranslation('lang', '/locale', languages=['cn'])install(True)
第四行中lang是翻译文件主名, /locale是存放翻译文件的路径,第三个参数是是否使用unicode,第五行languages参数指定要使用的语言存放的子目录,这里cn表示使用/locale/cn/LC_MESSAGES/路径下的翻译文件
注意: # -- coding: utf-8 -- 一定要写在前两行,写第三行都不会生效
4 处理要翻译的字符串,例:
print “Hello world!”
print “Python is a good Language”
改之:
print _(“Hello world!”)
print _(“Python is a good Language”)
5 编写并生成翻译文件,打开步骤1中编辑过的langpo文件添加翻译文字,形成如下内容:
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@liorg>\n"
"MIME-Version: 10\n"
"Content-Type: text/plain; charset=gb2312\n"
"Content-Transfer-Encoding: utf8\n"
"Generated-By: pygettextpy 15\n"
msgid " Hello world!"
msgstr "世界你好!"
msgid " Python is a good Language"
msgstr "Python 是门好语言"
保存之,运行/Tools/i18n/目录下的msgfmtpy,Linux下命令为: python msgfmtpy langpo(widows下的话,将langpo文件拷贝到/Tools/i18n/目录下,运行命令行窗口,到改目录下键入:msgfmtpy langpo),生成langmo,将该文件拷贝至/locale/cn/LC_MESSAGES/目录下,将步骤1生成的langpo文件直接生成langmo文件拷贝到/locale/en/LC_MESSAGES/目录下,好了一切都准备好了,命令行下运行你的主文件,看看两个print命令是不是输出了世界你好! Python 是门好语言,如果将主文件第五行languages参数置为en,则输出是Hello world! Python is a good Language,因为en目录下langmo文件未做任何的翻译,默认字符串不被替换
上述实现的方法用在界面编程上可以实现中英文界面的切换,需要作个配置文件选择中/英文;或者在主文件开始时先获取 *** 作系统本地语言然后根据获取结果再设置中/英文,这样就可以实现软件语言自适应;如果想实现软件语言在线切换,对于python来说就比较困难了,需要在软件中加入界面刷新机制,不推荐,可以在切换中/英文设置后软件下一次启动生效(软件如Ulipad)
Note:
调用python安装目录的 Tools/i18n/pygettextpy抽取所需翻译的模板
>>> pygettextpy path/to/yourfilepy
将生成一个名为messagespot的文件
2生成模板文件后,修改这个模板文件,其中的msgid为键值,对应你程序里写的文本,如:_("New File"),而msgstr为翻译后的值。还有就是注意修改文件头部分Content-Type的charset为合适的编码,比如utf8
3编写好模板后,把扩展名修改为po,运行Tools/i18n/msgfmtpy,生成二进制的资源文件
>>> msgfmtpy messagespo
将生成一个名为messagesmo的文件
4把这个mo文件放在正确的位置
比如你在程序中是这样写的:
gettextinstall('i18ntest', '/locale', unicode=True)
gettexttranslation('i18ntest', '/locale', languages=['cn'])install(True)
那么你的程序目录下需要存在/local/cn/LC_MESSAGES/i18ntestmo
这样程序启动时就会读取这个资源文件,替换对应的文本,实现国际化了。
注意:如果使用utf格式保存,po文件不能有BOM头。cn目录是所对应的语言,LC_MESSAGES目录是gettextpy里要求的,mo文件必须和所定义的域同名,见
gettextpy的mofile = ospathjoin(localedir, lang, 'LC_MESSAGES', '%smo' % domain)
pycharm添加python解释器的方法: file->settings->project: xxx -> project interpreter
项目代码直接 file -> open
以上就是关于怎么从python引入自己的模块全部的内容,包括:怎么从python引入自己的模块、python模块i18n怎么导入、pycharm怎么导入python等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)