我创建了一个非常简单的python项目,包括空foo.py
和setup.py
:
setup( # ...
name='any_name',
version='1.4',
py_modules=['foo']
# ...
)
然后将其分发到我当地的pypi repo(Nexus):$ python setup.py sdist upload -r mypypi
回购邮件的zip文件中有setup.py
并安装到我当前的文件夹:$ pip install --target=. any_name
。
安装的文件夹中没有setup.py
我希望setup.py
必须在已安装的文件夹中。这是对的吗?
谢谢!
答案 0 :(得分:1)
已编辑:我完全修改了我的答案,以便让事情变得更轻松(我希望)。
setup.py
不需要安装,只需安装软件包即可。默认情况下,当基于setup.py
创建分发时,它已包含多个文件和/或目录(例如{setup}中packages
参数中引用的模块{...} ,
setup.py ,
* .txt`文件,等等)。可以在此处找到自动捆绑在分发中的文件的完整列表:https://docs.python.org/3.6/distutils/sourcedist.html#specifying-the-files-to-distribute
如果您需要指定应属于您的发行版的其他文件或目录,则可以在调用package_data
时定义data_files
和/或setup(...)
参数。有关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
中列出的文件将在安装时自动复制;
- MANIFEST.in
中列出的include_package_data
参数设置为setup(...)
时,True
中列出的文件只会被复制。
但请注意,如果您未使用package_data
(即仅用于二进制分发),则sdist
中列出的文件仅包含 。因此,始终依赖MANIFEST.in
与include_package_data=True
相结合更为安全。