包和路径问题

你好,
我正在为我的Python软件编写一些单元测试
软件包.这是基本结构:
mypackage
__init__.py
模块1
__init__.py
mod1.py
模块2
__init__.py
mod2.py
UNITSESTS
__init__.py
alltests.py
test1.py
test2.py
在alltest.py中,我希望能够"导入
mypackage.unittests.test1".实际上在pyscripter中
预期的.但是,当我从命令行执行代码时,我
获取以下错误:
Infrorror:no模块名为mypackage.unittests.test1
我已经读到,"导入软件包时,python搜索
SYS.Path上的目录寻找包装子目录.
因此,我尝试将以下代码添加到我的alltests.py中,应该
将mypackage的目录添加到路径(并且确实如此).
导入OS,系统
newPath = os.path.normpath(os.path.join(__file__," ../../"))
sys.path.append(newPath)
我仍然遇到相同的错误.有人可以指向右边的我吗
方向?提前致谢:
丹尼尔

# 回答1


8月27日,18:44,丹尼尔 [...]
要注意的一件事:如果您直接运行alltests.py(您
不要明确提及),即使您从目录中这样做
包含包装层次结构的根(mypackage),它将是
包含alltests.py的目录(UNITSESTS)将出现在
pythonpath/sys.path.有时候采取这种行为很容易
在运行程序时理所当然.
一个问题:如果您准备了包含该目录的目录会发生什么
使用插入物(在元素0)的sys.path的包装层次结构的词根
而不是附加?
保罗
# 回答2


8月27日,11:00*上午,Paul Boddie

[...]
要注意的一件事:如果您直接运行alltests.py(您
不要明确提及),即使您从目录中这样做
包含包装层次结构的根(mypackage),它将是
包含alltests.py的目录(UNITSESTS)将出现在
pythonpath/sys.path.有时候采取这种行为很容易
在运行程序时理所当然.
一个问题:如果您准备了包含该目录的目录会发生什么
使用插入物(在元素0)的sys.path的包装层次结构的词根
而不是附加?
保罗
我建议您将其更改为'sys.path.insert(0,newpath)'
没有解决错误.
我确实注意到包含文件的目录alltests.py结束了
在路径上.我也注意到(至少在winxp中)
sys.path修改将a'..'在路径中插入,而不是完整
通往" mypackage"的路径.我不确定这是否有所作为,但是
好像我应该能够添加'..'或"路径/到/mypackage"
到达路径,让它找到我的包裹.
还有其他建议吗?

# 回答3


8月27日,11:00*上午,Paul Boddie

[...]
要注意的一件事:如果您直接运行alltests.py(您
d 不要明确地提及),即使您从目录中这样做
包含包装层次结构的根(mypackage),它将是
包含alltests.py的目录(UNITSESTS)将出现在
pythonpath/sys.path.有时候采取这种行为很容易
在运行程序时理所当然.
一个问题:如果您准备了包含该目录的目录会发生什么
使用插入物(在元素0)的sys.path的包装层次结构的词根
而不是附加?
保罗
我建议您将其更改为'sys.path.insert(0,newpath)'
没有解决错误.
我确实注意到包含文件的目录alltests.py结束了
在路径上.我也注意到(至少在winxp中)
sys.path修改将a'..'在路径中插入,而不是完整
通往" mypackage"的路径.我不确定这是否有所作为,但是
好像我应该能够添加'..'或"路径/到/mypackage"
到达路径,让它找到我的包裹.
还有其他建议吗?

# 回答4


在2008年8月27日星期三下午6:44,丹尼尔 1)您使用的命令是什么来运行alltest.py模块?
2)什么是:
- python -c"导入mypackage"
- python -c"导入mypackage.unittests"
问候
马可
- -
marco bizzarri http://iliveinpisa.blogspot.com/
# 回答5


8月28日,2:28*am," Marco Bizzarri" 1)您使用的命令是什么来运行alltest.py模块?
2)什么是:
* * - python -c"导入mypackage"
* - python -c"导入mypackage.unittests"
问候
马可
- -
marco bizzarrihttp://iliveinpisa.blogspot.com/
我尝试从MyPackage目录中运行上面的两个命令
和Unitests目录.我单位得到以下响应.
C:\ mypackage> dir
驱动器中的音量c默认
C的目录:\ mypackage
2008年8月29日11:04 AM 2008年8月29日11:04 AM 2008年8月29日11:05 AM 2008年8月29日11:05 AM 2008年8月29日11:06 AM 2008年8月29日11:04 AM 0 __init__.py
1个文件0字节
5 dir(S)55,402,070,016字节免费
C:\ mypackage> dir Unitests
驱动器中的音量c默认
C的目录:\ mypackage \ UnitSests
2008年8月29日上午11:06 2008年8月29日上午11:06 2008年8月29日11:05 AM 0 alltests.py
2008年8月29日11:05 AM 0 TEST1.PY
2008年8月29日11:05 AM 0 TEST2.PY
2008年8月29日11:04 AM 0 __init__.py
4个文件0字节
2 dir(S)55,401,988,096字节免费
C:\ mypackage> python -c"导入mypackage"
Trackback(最近的最新电话):
文件" ",第1行,
Importerror:没有名为mypackage的模块
c:\ mypackage> python -c"导入mypackage.unittests"
Trackback(最近的最新电话):
文件" ",第1行,
Importerror:no模块名为mypackage.unittests
# 回答6


在8月29日,19:08,丹尼尔<丹尼 el.watr ...@gmail.comwrote:
如果您从这里运行Unitests \ alltests.py,Sys.path最初将
请参阅此目录(c:\ mypackage),并在其中设置的其他内容
您的环境.您投入的额外路径修改
alltests.py将附加(或插入)以下...
OS.Path.normpath(OS.Path.Join(__File__," ../../"))
-os.path.normpath(os.path.join(" c \\:mypackage \\ unittests \ unitests \)
\ alltests.py"," ../../")))
-os.path.normpath(" C \\:mypackage")
- " c \\:mypackage"
由于导入语句然后尝试访问mypackage,因此
本身在C:\ mypackage目录中 - 在C:\ Directory中 -
导入失败.先前的,自动在Sys.path中添加的条目为
由上面显示的路径修改复制,这样就无济于事
这是.
在这里,sys.path应该指C:\ mypackage \ Unitests在某个地方
不会帮助Python找到mypackage. alltests.py中的路径修改
应该按以上执行,生产C:\ mypackage,这无济于事.
我想最简单的事情是更改路径修改
使用" ../../ .."的代码应引起对C:\的引用
c:\ mypackage.与该代码的这一特定部分的混乱
是" .."的方式不会导致os.path.join在目录上操作
c:\ mypackage \ Unitests,但在文件c:\ mypackage \ UnitTests上
\ alltests.py-但是,这几乎是可以预料的,因为
OS.Path.Join并不真正知道其第一个论点确实是一个
文件或该文件" .."与文件结合使用.
我倾向于做的事情,尤其是__file__,是首次使用
os.path.split删除文件名 - 严格来说,这是
叶名 - 然后应用上述修改
上面,尽管可能没有真正的区别,或者确实没有任何区别
两种方法的优势.
保罗
# 回答7


8月29日,1:15*PM,Paul Boddie

如果您从这里运行Unitests \ alltests.pys.py,则最初是Sys.pathwill
请参阅此目录(c:\ mypackage),并在其中设置的其他内容
您的环境.您投入的外置术
alltests.py将附加(或插入)以下...
* * os.path.normpath(os.path.join(__file__," ../../"))
-os.path.normpath(os.path.join(" c \\:mypackage \\ unittests \ unitests \)
\ alltests.py"," ../../")))
-os.path.normpath(" C \\:mypackage")
- " c \\:mypackage"
由于导入语句然后尝试访问mypackage,因此
本身在C:\ mypackage目录中 - 在C:\ Directory中 -
导入失败.以前的,自动添加了sys.pathis中的条目
由上面显示的Pathmodification重复,因此无济于事
这是.
在这里,sys.pathsh应该指C:\ mypackage \ Unitests在某个地方,
不会帮助Python找到mypackage. alltests.py中的PathModification
应该按以上执行,生产C:\ mypackage,这无济于事.
我想最简单的事情是更改PathModification
使用" ../../ .."的代码应引起对C:\的引用
c:\ mypackage. Th e与该代码的这一特定部分混淆 是" .."的方式不会导致os.path.join在目录上操作 c:\ mypackage \ Unitests,但在文件c:\ mypackage \ UnitTests上 \ alltests.py-但是,这几乎是可以预料的,因为 OS.Path.Join并不真正知道其第一个论点确实是一个 文件或该文件" .."与文件结合使用. 我倾向于做的事情,尤其是__file__,是首次使用 os.path.split删除文件名 - 严格来说,这是 叶名 - 然后应用上述修改 上面,尽管可能没有真正的区别,或者确实没有任何区别 两种方法的优势. 保罗 谢谢保罗. 那做了这个问题. 丹尼尔

标签: python

添加新评论