这是(我的一部分)项目结构:
<root>
|- src
|-main
|-python
|- common
|- constans
|- controller
|- resources
|- rest
- setup.py
我想让我的包'常用','映射器'和'休息'在根目录下可用(这将使引用更简洁)。它应该是这样的:
<root>
- common
- mappers
- rest
- setup.py
这是我的setup.py文件,基于https://docs.python.org/2/distutils/examples.html#pure-python-distribution-by-package
from setuptools import setup, find_packages
setup(name='my_project',
version='0.0.1',
package_dir={'src.main.python': ''},
packacges = ['src.main.python']
)
根据我在网上找到的一个例子,我有一个MANIFEST.in文件:
include src.main.python fp README COPYING
recursive-include src\main\python *
当我使用命令python setup.py sdist
时,它会在根目录下创建一个目录'dist',我的项目在一个zip文件中。我的包(普通,地图和休息)在src\main\python
下,而不是在根文件夹下。如何将它们放在根文件夹下呢?
答案 0 :(得分:0)
我使用pybuilder http://pybuilder.github.io/创建了我的项目,有一个关于如何创建项目等的很棒的教程。当你的项目被创建并且你的代码已经准备好构建时,请转到build.py所在的根目录。找到文件并使用
pyb
在项目的根目录中创建目标文件夹。
转到target/dist/name_of_your_project
应该有一个setup.py文件。
在此安装文件中,pybuilder为您生成,确保 zip_safe = False 。这是我的设置文件的摘录:
from setuptools import setup
if __name__ == '__main__':
setup(
name = 'my_project',
version = '1.0.dev0',
....
packages = ['my_project', 'my_project.common', 'my_project.mappers', 'my_project.rest'],
py_modules = ['__init__'],
classifiers = ['Development Status :: 3 - Alpha', 'Programming Language :: Python'],
entry_points={
'console_scripts':
[]
},
# data files
# package data
zip_safe=False
)
在此处使用以下命令:
python setup.py install
将根据setup.py文件中的信息在Lib / site-packages中创建一个文件夹:
c:\python27\lib\site-packages\my_project-1.0.dev0-py2.7.egg
在您的site-packages文件夹中有一个名为easy-install.pth
的文件,应该有一个包含此egg文件名称的条目:
import sys; sys.__plen = len(sys.path)
./loggingserver-0.1dev_r0-py2.7.egg
.....
./my_project-1.0.dev0-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
此文件中的目录用作挂钩。在任何项目中,您现在可以引用my_project-1.0.dev0-py2.7.egg的子文件夹。
所以我要说my_project-1.0.dev0-py2.7.egg
的结构如下:
-my_project
- common
- mappers
- rest
- EGG_INFO
参考常见如下:
from my_project import common