Skip to main content
 首页 » 编程设计

python之如何在 Pyramid 项目中添加自定义包

2025年05月04日8lyhabc

我创建了一个 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 应该不会出现你的问题。