[英]Setting proper python setup script
我在創建適當的python安裝腳本時遇到了很大的問題。 我的文件夾結構如下所示:
my_project/
my_project/
--__init__.py
--file_1.py
--file_2.py
--file_3.py
-AUTHORS
-CHANGELOG
-INSTALL
-LICENSE
-README.rst
-setup.cfg
-setup.py
我已經創建了一個安裝腳本,但是它的行為不像我想要的那樣。 設置腳本:
from ez_setup import use_setuptools
use_setuptools()
import os
import sys
from setuptools import setup, find_packages
readme_file = os.path.join(os.path.dirname(__file__), 'README.rst')
try:
long_description = open(readme_file).read()
except IOError, err:
sys.stderr.write("[ERROR] Cannot find file specified as ""``long_description`` (%s)\n" % readme_file)
sys.exit(1)
setup(
name = 'my_project',
version='0.0.1',
author = 'AUTHOR',
author_email = 'CONTACT',
url = 'http://example.com',
description= 'Some description',
long_description = long_description,
packages = find_packages('my_project'),
package_dir = {'':'my_project'},
package_data = {'':['*.py']},
include_package_data = True,
scripts = [],
requires = [],
license = 'BSD License',
install_requires = [
'some_packages',
],
classifiers = [
'Development Status :: 2 - Pre-Alpha',
'Environment :: Web Environment',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Database',
'Topic :: Internet',
'Topic :: Software Development :: Libraries :: Python Modules',
],
keywords = 'python, setup, script, the best',
)
在這之后:
sudo python setup.py alias release register sdist bdist_egg upload
sudo python setup.py release
到目前為止,一切都很好,但是當我嘗試時:
sudo pip install my_project
我只進入/usr/local/lib/python2.7/dist-packages/一個名為my_project-0.0.1.egg-info /的文件夾,但是沒有my_project的init ,file_1,file_2,file_3 python文件。
我知道my_project-0.0.1.egg-info /是必需的,但是我的文件在哪里?
然后我嘗試了:
sudo python setup.py install
沒有任何作用,但是這次我得到了一個文件夾my_project-0.0.1-py2.7.egg。
我想進入/usr/local/lib/python2.7/dist-packages/兩個目錄:
- my_project-0.0.1.egg-info/
- my_project with my files
您的問題在這一行:
package_dir = {'':'my_project'},
您告訴它my_project
是查找頂級軟件包的地方。 因此, find_packages('my_project')
將在my_project/my_project
頂級目錄( my_project
)中尋找一個包。 由於沒有這種東西,因此最終會得到一個空包。
只需刪除該行,一切都會正常。
在進行此操作時,您會使事情變得有些復雜。 您沒有使用ez_setup
任何內容,因此刪除前兩行會更簡單。 而且您只添加了一個靜態包,因此實際上沒有理由使用find_packages
; 您可以只使用packages = ['my_project']
。
同時,這是將來如何調試內容的方法。
首先,在實際工作正常之前,請勿嘗試使用sudo python setup.py alias release register sdist bdist_egg upload
。 調試本地文件比已經上傳到PyPI的要容易得多。 只需執行python setup.py sdist
,然后您可以查看生成的tarball並確保它看起來確定,然后嘗試pip install .
和/或pip install dist/my_project-0.0.1.tar.gz
以確保其確實有效。
其次, setup.py
只是普通的Python代碼; 您可以隨時記錄事情以查看發生了什么。 例如,如果find_packages('my_project')
似乎工作不正常,請嘗試在setup(…)
之前執行print(find_packages('my_project'))
setup(…)
來查看其工作狀況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.