我创建了一个非常简单的python项目,包括空foo.py
和setup.py
:
setup( # ...
name='any_name',
version='1.4',
py_modules=['foo']
# ...
)
然后将其分发到我的本地 pypi 存储库 (Nexus):$ python setup.py sdist upload -r mypypi
.
存储库上的 zip 文件中有一个setup.py
。
并安装到我当前的文件夹:$ pip install --target=. any_name
.
已安装的文件夹中没有setup.py
。
我希望setup.py
必须在已安装的文件夹中。这是对的吗?
谢谢!
编辑:我完全修改了我的答案,使事情变得更容易(我希望)。
setup.py
不需要安装,只需要安装包。默认情况下,当基于setup.py
创建发行版时,它已经包含多个文件和/或目录(例如packages
'setup(...)参数中引用的模块),
setup.py,
*.txt' 文件,依此类推)。可以在此处找到自动捆绑在发行版中的文件的完整列表:https://docs.python.org/3.6/distutils/sourcedist.html#specifying-the-files-to-distribute
如果需要指定应作为发行版一部分的其他文件或目录,则可以在调用setup(...)
时定义package_data
和/或data_files
参数。有关package_data
和data_files
的预期格式的详细信息,请参阅 ttps://docs.python.org/3.6/distutils/setupscript.html#distutils-installing-package-data 。
您还可以定义一个MANIFEST.in
文件来列出需要成为分发一部分的所有文件和目录。默认情况下,package_data
和data_files
中列出的所有文件将自动追加到MANIFEST.in
中列出的文件。
请注意,MANIFEST.in
中定义的所有文件都将是发行版的一部分,但在安装包时不一定包含。对于我从 Python 打包文档中了解到的内容: -package_data
和data_files
中列出的文件将在安装时自动复制; -仅当要setup(...)
include_package_data
参数设置为True
时,才会复制MANIFEST.in
中列出的文件。
但是,请注意,package_data
中列出的文件仅在不使用sdist
时才包含在您的安装中(即仅用于二进制分发)。因此,始终将MANIFEST.in
与include_package_data=True
结合使用更安全。