我正在開發一個Python應用程序,並在分支發佈的過程中。我已經在公司服務器上設置了PyPI服務器,並且已將我的包的源代碼發佈複製到它上面。我應該如何處理在我的setup.py腳本中導入第三方庫?
我檢查到包裹在服務器上,然後嘗試在我的本地開發機器上安裝它。我結束了這樣的輸出:
$ pip3 install --trusted-host 172.16.1.92 -i http://172.16.1.92:5001/simple/ <my-package>
Collecting <my-package>
Downloading http://172.16.1.92:5001/packages/<my-package>-0.2.0.zip
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\setup.py", line 9, in <module>
import appdirs
ModuleNotFoundError: No module named 'appdirs'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\
的原因是,我試圖導入第三方庫appdirs
在我setup.py
,這是必要的,我計算data_files
參數setup()
:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
import os
from collections import defaultdict
import appdirs
from <my-package>.version import __version__ as <my-package>_version
APP_NAME = '<my-app>'
APP_AUTHOR = '<company>'
SYSTEM_COMPONENT_PLUGIN_DIR = os.path.join(appdirs.user_data_dir(APP_NAME, APP_AUTHOR), 'components')
# ...
setup(
# ...
data_files=component_files,
)
但是,我沒有appdirs
安裝在我的本地開發機器上,我不希望最終用戶也有它。
在setup.py
中依賴像這樣的第三方庫是否可以接受,如果有的話,推薦使用它們的方法是什麼?有沒有一種方法可以確保appdirs
在導入setup.py
之前得到安裝,或者我應該只是說明appdirs
是安裝我的軟件包所需的軟件包?
您是否嘗試過使用'setup_requires'?見https://pip.readthedocs.io/en/1.4.1/cookbook.html#controlling-setup-requires –
@PeterBrittain有沒有任何如何使用它的例子?我應該做些什麼,比如做兩個'setup()'調用,一個靠近'setup.py'的頂部,只有'setup_requires = ['appdirs']'和我已經在底部的那個? – Tagc
這並不常見......你可以在https://stackoverflow.com/questions/37471313/setup-requires-with-cython找到一個簡單的例子。這開始顯示了https://www.python.org/dev/peps/pep-0518/中提到的各種各樣的箍環,它突出顯示了另一個選項,即使用即將可用的pip來執行此操作。 –