我有一個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