我创建了一个 Pyramid 项目(使用 pcreate -s starter projtest)并使用默认结构,pserve 按预期运行项目。 但是,当我在 views.py 和 templates 目录的同一级别添加包目录(例如,名为“skimpygimpy”)时,pserve 无法启动项目(命令名称“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
那么,我如何在 Pyramid 项目中添加自定义包并在调用 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
然后是消息: 无效的命令名称“development.ini”
如果我删除“skimpygimpy”目录,然后重新运行
../bin/python setup.py develop
../bin/pserve development.ini
没关系。
development.ini文件: http://codepad.org/VKPXm0jf
我做错了什么?有什么想法吗?
请您参考如下方法:
这很奇怪,我现在主要是在画一个空白,但我有一个猜测。我认为因为您正在将 skimpygimpy 的整个源代码树克隆为项目中的子包,所以 skimpygimpy setup.py 被诸如 config.scan() 之类的东西无意中执行了它从子包中导入所有代码。当 setup.py 被导入时,不好的事情会发生,因为它会使用 sys.args 来获取参数,这可以解释为什么它的行为就像你调用 python setup.py development.ini 。
应该通过将它们全部安装到同一个 virtualenv 中来找到依赖项,当这样做时,它们在文件系统上的实际位置几乎不相关,因为解释器的路径总是包含 virtualenv 中的东西。
因此,第三方项目不应放在您的包中,而应安装在 virtualenv 中,因此我认为您应该完全避免将 skimpygimpy 作为子包放置。这意味着如果您愿意,可以将其克隆到顶级 projtest 文件夹中,而不是在 projtest 包中。
我很确定您的问题不会发生在任何不包含 setup.py 的手动创建的包中。例如 mkdir foo; touch foo/__init__.py 应该不会出现你的问题。
