我正在我的本地目录中开发/测试包.我想在解释器(v2.5)中导入它,但sys.path不包含当前目录.现在我输入sys.path.insert(0,'.').有没有更好的办法?
也,
from . import mypackage
Run Code Online (Sandbox Code Playgroud)
失败并出现此错误:
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud) 我最近移植了我的Python项目以在Python 3.1上运行.为此我必须在我的项目的子模块和子包中采用相对导入的策略.我不这样做,现在项目本身有效,但我注意到我无法执行其中的任何子包或子模块.如果我尝试,我得到"builtins.ValueError:在非包中尝试相对导入".我只能导入整个项目.
这是正常的吗?
我知道有几个类似的问题,但我很难理解我得到的错误,浏览文档和类似的问题还没有帮助.如果有的话,类似的问题让我觉得我正在做的是对的.
我有以下文件:
SRC/main.py
from pack import pack
if __name__ == '__main__':
pack.exec("Hello Universe!")
Run Code Online (Sandbox Code Playgroud)
SRC /包/ pack.py
import util
def exec(text):
util.write(text)
if __name__ == '__main__':
exec("Hello World!")
Run Code Online (Sandbox Code Playgroud)
SRC /包/ util.py
def write(text):
print(text)
Run Code Online (Sandbox Code Playgroud)
*src/pack/_ init _.py*
EMPTY FILE
Run Code Online (Sandbox Code Playgroud)
当我python pack.py从src/pack目录运行时,它可以工作(打印"Hello World!").但是,当我python main.py从src目录运行时,我得到以下异常:
Traceback (most recent call last):
File ".../src/main.py", line 1, in <module>
from pack import pack
File ".../src/pack/pack.py", line 1, in <module>
import util
ImportError: No module named util
Run Code Online (Sandbox Code Playgroud)
如果我改变了进口线 …
这是我上一个问题的后续内容,我正在使用Senthil Kumaran建议的2to3工具
它似乎运作良好,但它没有拿起这部分:
raise LexError,("%s:%d: Rule '%s' returned an unknown token type '%s'" % (
func.func_code.co_filename, func.func_code.co_firstlineno,
func.__name__, newtok.type),lexdata[lexpos:])
Run Code Online (Sandbox Code Playgroud)
这在3.2中应该是什么样的?
编辑:从下面的答案的变化是好的,2to3现在似乎工作正常.在setup.py构建中,我现在得到以下错误,请参阅我的新问题.