Python3 非源构建
Python3 out of source build
我想要的
将python setup.py
生成的所有构建输出(build
、dist
、my_package.egg_info
等)放入特定目录。
项目结构
awesome_pkg/
__init__.py
mod.py
my_fancy_app/
__init__.py
__main__.py
target/
requirements.txt
setup.py
__main__.py
:
def main():
print("Hello virtual environment")
if __name__ == '__main__':
main()
setup.py
:
import setuptools
setuptools.setup(
name = "my_fancy_app",
version="0.0.1",
author="Me Myself",
author_email="me@my.self",
description="Some description",
long_description="Some long description",
packages=setuptools.find_packages(),
entry_points={
'console_scripts': [ 'hlpth = my_fancy_app.__main__:main' ]
},
classifiers=[
"Programming Language :: Python :: 3.7",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.7'
)
__init__.py
是一个空脚本
我试过的
我尝试简单地 运行 setup.py
使用特定的工作目录:
cd target
python3.7 ../setup.py bdist_wheel
问题
问题是它并没有真正打包任何东西:
$ python3.7 ../setup.py bdist_wheel
running bdist_wheel
running build
installing to build/bdist.linux-x86_64/wheel
running install
running install_egg_info
running egg_info
creating my_fancy_app.egg-info
writing my_fancy_app.egg-info/PKG-INFO
writing dependency_links to my_fancy_app.egg-info/dependency_links.txt
writing entry points to my_fancy_app.egg-info/entry_points.txt
writing top-level names to my_fancy_app.egg-info/top_level.txt
writing manifest file 'my_fancy_app.egg-info/SOURCES.txt'
reading manifest file 'my_fancy_app.egg-info/SOURCES.txt'
writing manifest file 'my_fancy_app.egg-info/SOURCES.txt'
Copying my_fancy_app.egg-info to build/bdist.linux-x86_64/wheel/my_fancy_app-0.0.1-py3.7.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/my_fancy_app-0.0.1.dist-info/WHEEL
creating 'dist/my_fancy_app-0.0.1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'my_fancy_app-0.0.1.dist-info/METADATA'
adding 'my_fancy_app-0.0.1.dist-info/WHEEL'
adding 'my_fancy_app-0.0.1.dist-info/entry_points.txt'
adding 'my_fancy_app-0.0.1.dist-info/top_level.txt'
adding 'my_fancy_app-0.0.1.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
但是 运行从源根目录中安装它工作得很好 python3.7 setup.py bdist_wheel
并且两个包都捆绑到 wheel
存档中。
有没有办法在源代码之外进行构建?
您可以为每个构建类型指定输出目录,如下所示:
python setup.py sdist -d target/ bdist -d target/ bdist_wheel -d target/
要删除构建期间创建的任何临时 build
等 dirs/files,运行 之后的内容:
python setup.py clean --all
注意,从它所在的目录到 运行 setup.py
通常是最安全的。在内部它可能有引用 src、libs 等东西的相对路径,如果你是在 运行ning.
的不同位置
您将不得不反复尝试,直到找到适合您的具体用例的 setuptools 命令和选项的正确组合。例如,我在 bdist_wheel
:
的以下组合中取得了一些成功
python3 setup.py egg_info --egg-base target build --build-base target/build bdist_wheel --dist-dir target/dist
我想要的
将python setup.py
生成的所有构建输出(build
、dist
、my_package.egg_info
等)放入特定目录。
项目结构
awesome_pkg/
__init__.py
mod.py
my_fancy_app/
__init__.py
__main__.py
target/
requirements.txt
setup.py
__main__.py
:
def main():
print("Hello virtual environment")
if __name__ == '__main__':
main()
setup.py
:
import setuptools
setuptools.setup(
name = "my_fancy_app",
version="0.0.1",
author="Me Myself",
author_email="me@my.self",
description="Some description",
long_description="Some long description",
packages=setuptools.find_packages(),
entry_points={
'console_scripts': [ 'hlpth = my_fancy_app.__main__:main' ]
},
classifiers=[
"Programming Language :: Python :: 3.7",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.7'
)
__init__.py
是一个空脚本
我试过的
我尝试简单地 运行 setup.py
使用特定的工作目录:
cd target
python3.7 ../setup.py bdist_wheel
问题
问题是它并没有真正打包任何东西:
$ python3.7 ../setup.py bdist_wheel
running bdist_wheel
running build
installing to build/bdist.linux-x86_64/wheel
running install
running install_egg_info
running egg_info
creating my_fancy_app.egg-info
writing my_fancy_app.egg-info/PKG-INFO
writing dependency_links to my_fancy_app.egg-info/dependency_links.txt
writing entry points to my_fancy_app.egg-info/entry_points.txt
writing top-level names to my_fancy_app.egg-info/top_level.txt
writing manifest file 'my_fancy_app.egg-info/SOURCES.txt'
reading manifest file 'my_fancy_app.egg-info/SOURCES.txt'
writing manifest file 'my_fancy_app.egg-info/SOURCES.txt'
Copying my_fancy_app.egg-info to build/bdist.linux-x86_64/wheel/my_fancy_app-0.0.1-py3.7.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/my_fancy_app-0.0.1.dist-info/WHEEL
creating 'dist/my_fancy_app-0.0.1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'my_fancy_app-0.0.1.dist-info/METADATA'
adding 'my_fancy_app-0.0.1.dist-info/WHEEL'
adding 'my_fancy_app-0.0.1.dist-info/entry_points.txt'
adding 'my_fancy_app-0.0.1.dist-info/top_level.txt'
adding 'my_fancy_app-0.0.1.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
但是 运行从源根目录中安装它工作得很好 python3.7 setup.py bdist_wheel
并且两个包都捆绑到 wheel
存档中。
有没有办法在源代码之外进行构建?
您可以为每个构建类型指定输出目录,如下所示:
python setup.py sdist -d target/ bdist -d target/ bdist_wheel -d target/
要删除构建期间创建的任何临时 build
等 dirs/files,运行 之后的内容:
python setup.py clean --all
注意,从它所在的目录到 运行 setup.py
通常是最安全的。在内部它可能有引用 src、libs 等东西的相对路径,如果你是在 运行ning.
您将不得不反复尝试,直到找到适合您的具体用例的 setuptools 命令和选项的正确组合。例如,我在 bdist_wheel
:
python3 setup.py egg_info --egg-base target build --build-base target/build bdist_wheel --dist-dir target/dist