2

我创建了一个金字塔项目(带有pcreate -s starter projtest)并使用默认结构, pserve 按预期运行项目。views.py但是,当我在和目录的同一级别添加包目录(例如,称为“skimpygimpy”)时templates,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

我究竟做错了什么?有任何想法吗?

4

1 回答 1

1

这很奇怪,我现在大部分时间都在画一个空白,但我有一个猜测。我认为,由于您将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不应该展示你的问题。

于 2013-10-16T18:22:55.483 回答