我有几个共享常见模块的python项目.到现在为止,我已经......咳嗽......保留公共代码的多个副本并手动同步.但我显然更愿意做别的事情.
它现在在我看来,好像zc.Buildout可能是我需要的.我想我应该做的是将我系统的每个可重用组件放入一个单独的egg中,然后使用buildout将它们组装到项目中.
我也在想,对于任何特定的模块,我应该将单元测试放入一个单独的包或蛋中,这样我就不会在每个项目中安装组件的单元测试副本.我只想在我的库开发的地方进行单元测试,而不是在刚刚使用的地方.
所以也许我想要这样的东西
projects
lib1
tests
code
lib2
tests
code
app1
tests
appcode
app2
tests
appcode
Run Code Online (Sandbox Code Playgroud)
等等
app1和app2都是独立的应用程序,有自己的代码和测试,但也包括和使用lib1和lib2.和lib1/test,lib1/code,lib2/test,lib2code,app1,app2是分开的鸡蛋.这听起来不错吗?
但是,我现在感到困惑.我假设当我开发app1时,我希望buildout将lib1,lib2和app1的副本放到一个单独的工作目录中,而不是直接将这些库的副本放在app1下.但是,这如何与我的SVN源代码控制一起使用?如果使用buildout动态构造工作目录,它不能是一个实时SVN目录,我可以从中检查更改回存储库?
我是否误解了如何使用buildout?我会更好地采用完全不同的方法吗?如何在项目之间混合源代码控制和模块重用?
更新:感谢两位目前已回答此问题的人.我正在尝试更多这个.
我有一个Django项目似乎与settings.py工作得很好,它也导入了local_settings.py而没有问题.
我现在在设置文件的末尾添加了以下行:
try:
from extras import *
except ImportError, e:
print "import extras failed :: " + `e`
Run Code Online (Sandbox Code Playgroud)
extras.py是一个额外配置信息的文件,与settings.py和local_settings.py位于同一目录中,但是,我现在得到:
import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',)
Run Code Online (Sandbox Code Playgroud)
这似乎是由于我试图
from django.contrib.auth.models import User,UserManager
from django.db import models
Run Code Online (Sandbox Code Playgroud)
在那个extras.py文件中.
有人有主意吗?
干杯
我想剪切一串电子邮件地址,这些地址可以用逗号和空格的任意组合分隔.
而且我认为这很简单:
sep = re.compile('(\s*,*)+')
print sep.split("""a@b.com, c@d.com
e@f.com,,g@h.com""")
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.我找不到一个不会留下像这样的空槽的正则表达式:
['a@b.com', '', 'c@d.com', '', 'e@f.com', '', 'g@h.com']
Run Code Online (Sandbox Code Playgroud)
我尝试了各种组合,但似乎都没有.事实上,这是否可能与正则表达式一起?
在Django中,是否有为QuerySet编写复杂的自定义过滤器的标准方法?
正如我可以写的那样
MyClass.objects.all().filter(field=val)
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
MyClass.objects.all().filter(customFilter)
Run Code Online (Sandbox Code Playgroud)
我可以使用生成器表达式
(x for x in MyClass.objects.all() if customFilter(x))
Run Code Online (Sandbox Code Playgroud)
但这会失去可链接性以及QuerySets提供的任何其他功能.
似乎Clojure编译器默认不执行此操作:Clojure编译器是否检查记录和类型是否实现协议?
任何,比方说,Lein插件这样做?
我有一个项目,现在我想使用 pipenv。
我想从我的主 bin 目录对它进行符号链接,这样我就可以从另一个目录(它与本地文件交互的地方)运行它,但仍然使用适当安装的文件在 pipenv 中运行它。
我可以做类似的事情吗
pipenv run python /PATH/TO/MY/CODE/foo.py localfile.conf
Run Code Online (Sandbox Code Playgroud)
或者它不会选择 /PATH/TO/MY/CODE/Pipenv 中定义的 pipenv ?
我一直在使用Python破解类:
def hack(f,aClass) :
class MyClass(aClass) :
def f(self) :
f()
return MyClass
A = hack(afunc,A)
Run Code Online (Sandbox Code Playgroud)
这看起来很干净.它需要一个类,A,创建一个派生自它的新类,它有一个额外的方法,调用f,然后将新类重新分配给A.
这与Python中的元类黑客有何不同?使用元类比这有什么好处?
据推测,Javascript被编译为某种字节码以在V8引擎上运行?Python是否是一种类似的语言,我们可以想象Python被编译为相同的字节码并在V8上运行?
任何试图这样做的项目?
在Python中,我想同时使用cmd和curses编写一个终端程序。使用cmd接受和解码完整的输入行,但使用curses定位输出。
像这样将curses和cmd的示例混在一起:
import curses
import cmd
class HelloWorld(cmd.Cmd):
"""Simple command processor example."""
def do_greet(self, line):
screen.clear()
screen.addstr(1,1,"hello "+line)
screen.addstr(0,1,">")
screen.refresh()
def do_q(self, line):
curses.endwin()
return True
if __name__ == '__main__':
screen = curses.initscr()
HelloWorld().cmdloop()
Run Code Online (Sandbox Code Playgroud)
我发现打字时什么也没看到。在屏幕上显示任何内容之前,curses可能正在等待刷新。我可以切换到使用getch(),但是那样我会失去cmd的值。
有没有办法使它们一起工作?
有没有人有一个简单的例子,说明如何使用Jison定义一个解析类似python的缩进的语法?