我有一个Python包的源看起来像这样在PyPI上开发python包时如何管理依赖关系?
├── MANIFEST.in
├── README.rst
├── setup.cfg
├── setup.py
└── sqlemon
├── connection_strings.py
└── __init__.py
大部分代码是__init__.py
,它具有以下的进口:
import os
import sqlemon.connections_strings as sqlcs
import yaml #This is the problem
如果我们运行
python setup.py sdist
我们看到以下错误
Traceback (most recent call last):
File "setup.py", line 2, in <module>
import sqlemon
File "/home/danielsank/src/sqlemon/sqlemon/__init__.py", line 4, in <module>
import yaml
ImportError: No module named yaml
这表明我工作在我的项目中的virtualenv必须安装所有项目的依赖项才能进行开发。 我想这是没有道理的,但我不能完全肯定的工作流程应该是什么样子,因为该项目的依赖在setup.py
列:在requirements.txt
from distutils.core import setup
import sqlemon
version = sqlemon.__version__
project_name = sqlemon.__project_name__
setup(name=project_name,
# Irrelevant lines removed
install_requires=[
'sqlalchemy',
'alembic',
'pyyaml',
'sqlalchemy-schemadisplay'
],
)
我通常把需求,以便开发人员可以做pip install -r requirements.txt
,但因为要求已经在setup.py
中看起来多余。
此外,在将我的项目上传到PyPI后,当我尝试从pypi进行pip安装时,安装失败,除非我已经在我的virtualenv中安装了pyyaml
。显然这不是我们想要的行为; pyyaml
应自动安装,因为它在setup.py
的install_requires
列表中列出。
这种情况下推荐的工作流程是什么?
它发生在我身上,一个选项可能是不导入我自己的包'setup.py' ... – DanielSank
[相关](https://stackoverflow.com/questions/2058802/how-cani-i-获得最版本定义功能于设置-PY-setuptools的 - 在 - 我的包) – DanielSank