创建正确的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 /的文件夹,但没有带 init的my_project ,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
答案 0 :(得分:1)
你的问题在这一行:
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')
似乎无法正常工作,请尝试在print(find_packages('my_project'))
之前执行setup(…)
,看看它在做什么。