我创建了一个金字塔项目(使用pcreate -s starter projtest
)并使用默认结构,pserve按预期运行项目。
但是,当我在views.py
和templates
目录的同一级别添加一个包目录(例如,名为“skimpygimpy”)时,pserve无法启动该项目(invalid command name 'development.ini'
误差)。
projtest/
|-- CHANGES.txt
|-- development.ini
|-- MANIFEST.in
|-- myproject
| |-- __init__.py
| |-- skimpygimpy
| | |-- __init__.py
| | |-- file.py
| | |-- ...
| |-- static
| | |-- favicon.ico
| | |-- logo.png
| | |-- pylons.css
| |-- templates
| | |-- mytemplate.pt
| |-- tests.py
| |-- views.py
|-- production.ini
|-- README.txt
|-- setup.cfg
|-- setup.py
那么,当我调用pserve时,如何在金字塔项目中添加自定义包并避免此错误(命令名称'development.ini'无效)?
有关此问题的更多信息:
我做了这些命令:
mkdir pyramid
cd pyramid/
virtualenv --no-site-packages env
cd env/
bin/easy_install pyramid
bin/pcreate -s starter projtest
cd projtest
cd projtest
hg clone https://code.google.com/p/skimpygimpy/
cd skimpygimpy
touch __init__.py
cd ..
cd ..
../bin/python setup.py develop
../bin/pserve development.ini
然后,消息:
invalid command name 'development.ini'
如果删除“skimpygimpy”目录,请重新运行
../bin/python setup.py develop
../bin/pserve development.ini
没关系。
development.ini文件: http://codepad.org/VKPXm0jf
我做错了什么?有什么想法吗?
答案 0 :(得分:1)
这是一个奇怪的,我现在大部分都在画一个空白,但我有一个猜测。我认为因为你将clickmpygimpy的整个源代码树克隆为你项目中的一个子包,所以很快就会出现像config.scan()
这样导入所有代码的问题。分包。当导入setup.py时,会发生不好的事情,因为它会使用sys.args
来获取参数,这可以解释为什么它的行为就像你调用python setup.py development.ini
一样。
依赖性应该通过将它们全部安装到相同的virtualenv中来找到,它们在文件系统上的实际位置在完成时几乎不相关,因为解释器的路径总是包含virtualenv中的内容。
因此,第三方项目不应该放在你的包中,而是安装到virtualenv中,所以我认为你应该避免将slipmpygimpy作为一个子包放置。这意味着如果你愿意,可以将它克隆到顶级projtest文件夹中,但不要在projtest包中。
我很确定任何手动创建的包不包含setup.py都不会出现问题。例如,mkdir foo; touch foo/__init__.py
不应出现您的问题。