首先让我说,我在过去一周进行了广泛的研究,但尚未找到这些问题的实际答案 - 只是一些模糊的答案,无法真正解释正在发生的事情。如果那只是因为我错过了我要找的东西,我很抱歉 - 请指出正确的方向。
我的目录结构是:
TestProject/
runtest*
testpackage/
__init__.py
testmod.py
testmod2.py
testsubs/
testsubmod.py
一些注意事项:
我观察到的事情:
还有问题:
提前致谢。
最佳答案
首先,您会在section 6 of The Python Tutorial 中找到您需要的所有信息。 .
(1) Does python deal differently with imports on packages & modules that exist in the pythonpath than when you are trying to import from your current directory?
不,它没有。实际上,Python 在导入模块时总是搜索 sys.path。当前目录中的模块只能找到,因为 sys.path 包含一个带有空字符串的条目,表示当前目录。
(2) Why doesn't
import testpackagegive me access totestpackage.testmod? When I importos, I can then accessos.path(etc).
为了效率,import testpackage只加载testpackage/__init__.py。如果您需要 testpackage.testmod,您必须显式导入它:
import testpackage # Just imports testpackage, not testpackage.testmod!
import testpackage.testmod # Import *both* testpackage and testpackage.testmod!
如果你总是想导出testmod,在__init__.py中导入它,这就是os (os/__init__ .py) 会。这样,如果您导入 testpackage,testpackage.testmod 始终隐式可用。
由于 Python 是跨平台的,实际上没有办法始终如一地自动加载目录中的模块,因为某些文件系统不区分大小写(Windows!)。 Python 不知道是否将 os/path.py 加载为 os.path 或 os.Path 等
(3) With a package, should I stick to using a single
__init__.pyin the base directory, or should I be nesting them in subsequent directories?
对于每个子包,您总是需要一个 __init__.py。曾就取消此要求进行过讨论,但最终决定保持原样。
(4) How can I import a module specifying the package name? I.E. from
testmod.py, I would like to importtestpackage.testmod2rather than justtestmod2.
这应该有效。只需确保从顶级目录运行代码即可。如果当前目录是 testpackage,testmod 不知道它在包中。
不过,首选方法是使用相对包内导入:
from . import testmod2
如果有一个名为 testmod2 的全局模块,这可以防止名称冲突,并使您能够毫无问题地在包中使用众所周知的模块的名称。
(5) What is the proper way to import submodules from the subsubs directory? The only solution I see is to append that directory to the pythonpath from
__init__.py, but I don't know if that's the correct way.
不,不要那样做!永远不要将一个目录放到 sys.path 中,而当它的父目录之一已经在 sys.path 中时!这可能会导致您的模块被加载两次,这是一件坏事!
通常你应该能够使用绝对或相对导入从子包中加载模块:
import testpackage.testsubs.testsubmod
from testpackage.testsubs import testsubmod
from .testsubs import testsubmod
只需确保在 testsubs/ 中创建一个 __init__.py!
关于Python 导入、路径、目录和模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163204/
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。